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

时间:2014-08-25 10:28:00

标签: java arrays list collections

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

a)使用int数组,每当我执行以下程序时,List size = 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[] = new String[]{"abc","klm","xyz","pqr"};),那么我的列表大小为4,我认为是正确的。

PS :使用Integer(Wrapper Class)数组,结果为Fine,但我不确定为什么在原始int数组中,列表大小为1。请解释一下。

2 个答案:

答案 0 :(得分:5)

由于java泛型,

List无法保存原始值(请参阅similar question)。因此,当您调用Arrays.asList(ar)时,Arrays会创建一个只包含一个项目的列表 - int数组ar

编辑:

Arrays.asList(ar)的结果将是List<int[]> List<int>,它将包含一个int s数组的项:

[ [1,2,3,4,5] ]

您无法从列表本身访问原始int。你必须这样访问它:

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

我认为这不是你想要的。

答案 1 :(得分:1)

List是泛型类型,原始类型不是type参数的有效替代。

因此,在您使用Arrays.asList()致电int[]时的第一个示例中,type参数的值将为int[]而不是int,并且它将返回int数组列表。它只有1个元素,即数组本身。

第二种情况是List<String>,正确地保存你传递给它的4个字符串。