Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Arrays.asList返回类型不匹配_Java_Collections - Fatal编程技术网

Java Arrays.asList返回类型不匹配

Java Arrays.asList返回类型不匹配,java,collections,Java,Collections,为什么下面的语句不返回整数列表 int[] ints = new int[] { 1, 2, 3, 4, 5 }; List<Integer> intsList = Arrays.asList(ints); //compilation error 返回字符串的列表。我猜它失败是因为它是一个基元数组,但为什么呢?实际上,我如何返回int的列表呢?这是因为数组。asList(新的int[]{1,2,3,4,5})将创建一个包含一项的列表,而不是包含五项的列表 但是请注意,这将实现您的预

为什么下面的语句不返回整数列表

int[] ints = new int[] { 1, 2, 3, 4, 5 };
List<Integer> intsList = Arrays.asList(ints); //compilation error

返回
字符串的列表。我猜它失败是因为它是一个基元数组,但为什么呢?实际上,我如何返回
int
的列表呢?这是因为
数组。asList(新的int[]{1,2,3,4,5})
将创建一个包含一项的
列表,而不是包含五项的
列表

但是请注意,这将实现您的预期:

List<Integer> intsList = Arrays.asList(1, 2, 3, 4, 5);
List intsList=Arrays.asList(1,2,3,4,5);
你的其他选择是:

  • 要首先创建一个
    整数[]
    ,或
  • 在循环中填充列表
该方法定义为:
公共静态列表asList(T…a)

因此,在第一种情况下,
T
int[]
,您将一个对象传递给该方法(即数组),因此它返回一个
int[]
列表


我想你把
误认为是asList(1,2,3,4,5)
(即5项)

列表中的
T
必须是
java.lang.Object
的某个子类型,而
int
不是。唯一的另一种解释是,当我们使用
..
时,您提供的是
int[]
数组,即
int[][]
。所以你得到了
列表

String
Object
的一个子类型,因此它可以正常工作。这也是在J2SE5.0中引入varargs之前它可以工作的唯一方法。通常,现有代码的解释不应在不同语言版本之间改变


现在,如果您想要一个
列表
,您可以遍历并框选每个整数。如果你的程序中有很多这样的元素,那么内存可能是个问题。您可能希望使用第三方库,该库使用
int[]
紧凑地支持
List
,或者只使用基本体的数组。不幸的是,Java不支持值类型。

您只能在
列表中拥有
对象。这排除了int的列表。我希望它会自动装箱。但列表给了他一个编译错误。另一个问题的答案很好,这可能是关闭的,不知道要搜索的正确术语。Java不自动装箱数组,它只自动装箱单个原语。是的,我已经尝试过了,它确实可以用int[]大小为百万?@arynaq您的两个选项是创建一个
Integer[]
而不是
int[]
,或者在循环中填充列表。完全正确+我记得。在Java中,如果愿意,您可以使用类型为T的数组调用一个方法,该方法的参数是T类型的可变项数。这就是为什么签名很重要。Java中没有
int
列表。
List<Integer> intsList = Arrays.asList(1, 2, 3, 4, 5);