Java 将Arrays.asList与int数组一起使用

Java 将Arrays.asList与int数组一起使用,java,arrays,list,collections,Java,Arrays,List,Collections,使用java.util.Arrays.asList,为什么它会为int(基本类型)和String数组显示不同的列表大小 a) 使用intarray,每当我执行以下程序时,列表大小=1 public static void main(String[] args) { int ar[]=new int[]{1,2,3,4,5}; List list=Arrays.asList(ar); System.out.println(list.size());

使用
java.util.Arrays.asList
,为什么它会为
int
(基本类型)和
String
数组显示不同的列表大小

a) 使用
int
array,每当我执行以下程序时,列表大小=1

public static void main(String[] args) {
        int ar[]=new int[]{1,2,3,4,5};
        List list=Arrays.asList(ar);
        System.out.println(list.size());

    }
b) 但是如果我从
int
数组类型更改为
String
数组(比如
String ar[]=newstring[]{“abc”、“klm”、“xyz”、“pqr”};
),那么我得到的列表大小是4,我认为是正确的


PS:使用
Integer
(包装类)数组,结果很好,但我不确定为什么在primitive
int
数组中,列表大小是1。请解释。

列表
无法保存原语值,因为java泛型(请参阅)。因此,当您调用
Arrays.asList(ar)
时,数组将创建一个只包含一项的列表-int数组
ar

编辑:

数组的结果。asList(ar)
将是一个
列表
列表
,它将包含一个项目,即
int
s的数组:

[ [1,2,3,4,5] ]
您不能从列表本身访问原语
int
s。您必须这样访问它:

list.get(0).get(0) // returns 1
list.get(0).get(1) // returns 2
...

我认为这不是您想要的。

列表是泛型类型,基本类型不是类型参数的有效替代品

因此,在第一个示例中,当使用
int[]
调用
Arrays.asList()
时,类型参数的值将是
int[]
,而不是
int
,它将返回int数组的列表。它只有一个元素,即数组本身


第二种情况是一个
列表
,正确地保存您传递给它的4个字符串。

可能您的编译器甚至在
列表
上给了您一个原始类型警告。许多IDE将提供一些有用的修复,其中一个将
List
更改为
List
。后者指向“daerin”和“icza”的答案。因此,如果数组创建一个只包含一个项的列表-int数组
ar
,那么如何使用list遍历和访问原始值?明白了!它应该像
intab[]=(int[])list.get(0)仔细观察
list.get(0).get(0)
无法在此处直接访问,因为最后一个
get()
是未定义的,除非您将整个语句键入其他集合(具有
get
方法)