Java 正在尝试将整数数组转换为列表

Java 正在尝试将整数数组转换为列表,java,arrays,list,Java,Arrays,List,我试图通过执行以下操作将int类型的数组转换为列表 List<Integer> endingRoutesBusStopsList = Arrays.asList(endingRoutesBusStops); List endingRoutesBusStopsList=Arrays.asList(endingRoutesBusStops); 但出于某种原因,我一直在说一个错误 Type mismatch: cannot convert from List<int[]>

我试图通过执行以下操作将int类型的数组转换为列表

List<Integer> endingRoutesBusStopsList = Arrays.asList(endingRoutesBusStops);
List endingRoutesBusStopsList=Arrays.asList(endingRoutesBusStops);
但出于某种原因,我一直在说一个错误

Type mismatch: cannot convert from List<int[]> to List<Integer>
类型不匹配:无法从列表转换为列表
我不明白问题是什么

我知道你在做什么

List<int[]> endingRoutesBusStopsList = Arrays.asList(endingRoutesBusStops);
List endingRoutesBusStopsList=Arrays.asList(endingRoutesBusStops);
将解决错误,但我不能以我想要的方式使用它


有人有什么想法吗?

这是因为
int[]
Integer[]
不同。自动装箱在
数组
s上不起作用。

这是因为
int[]
Integer[]
不同。自动装箱在数组上不起作用。

问题是因为“int[]”是一个对象

asList(T..)获取泛型vararg,这意味着它将“int[]”视为“Object”(数组int[]和Integer的公共超类是Object)

因此,从asList方法的角度来看,您不会传递int数组,而是传递一个对象

无论如何,您都应该进行从int到wrapper Integer的隐式转换。建议显式设置。

问题在于“int[]”是一个对象

asList(T..)获取泛型vararg,这意味着它将“int[]”视为“Object”(数组int[]和Integer的公共超类是Object)

因此,从asList方法的角度来看,您不会传递int数组,而是传递一个对象


无论如何,您都应该进行从int到wrapper Integer的隐式转换。建议明确说明。

我们还缺少一些代码,但一般来说,让我尝试用代码回答:

这项工作:

Integer[] arrayOfInt = { Integer.valueOf(0), Integer.valueOf(1) };
List<Integer> listOfInt = Arrays.asList(arrayOfInt);
Integer[]arrayOfInt={Integer.valueOf(0),Integer.valueOf(1)};
listOfInt=Arrays.asList(arrayOfInt);
这也起作用,因为原语“1”自动装箱为整数对象:

Integer[] arrayOfInt = { 1, 2, 3, 4 };
List<Integer> listOfInt = Arrays.asList(arrayOfInt);
Integer[]arrayOfInt={1,2,3,4};
listOfInt=Arrays.asList(arrayOfInt);
最后,这将不起作用,因为int[]不能自动装箱为整数[]:

int[] arrayOfInt = { 1, 2, 3, 4 };
List<Integer> listOfInt = Arrays.asList(arrayOfInt);
int[]arrayOfInt={1,2,3,4};
listOfInt=Arrays.asList(arrayOfInt);

更新:这来自于@MichaelBorek讨论中的评论。反复尝试相同的代码,无论是否自动装箱。自动装箱的代价似乎是,使用自动装箱的代码比直接使用对象的代码花费的时间要长5倍。

我们缺少了更多的代码,但总的来说,让我试着用代码来回答:

这项工作:

Integer[] arrayOfInt = { Integer.valueOf(0), Integer.valueOf(1) };
List<Integer> listOfInt = Arrays.asList(arrayOfInt);
Integer[]arrayOfInt={Integer.valueOf(0),Integer.valueOf(1)};
listOfInt=Arrays.asList(arrayOfInt);
这也起作用,因为原语“1”自动装箱为整数对象:

Integer[] arrayOfInt = { 1, 2, 3, 4 };
List<Integer> listOfInt = Arrays.asList(arrayOfInt);
Integer[]arrayOfInt={1,2,3,4};
listOfInt=Arrays.asList(arrayOfInt);
最后,这将不起作用,因为int[]不能自动装箱为整数[]:

int[] arrayOfInt = { 1, 2, 3, 4 };
List<Integer> listOfInt = Arrays.asList(arrayOfInt);
int[]arrayOfInt={1,2,3,4};
listOfInt=Arrays.asList(arrayOfInt);


更新:这来自于@MichaelBorek讨论中的评论。反复尝试相同的代码,无论是否自动装箱。自动装箱的成本似乎是使用它的代码比直接使用对象的代码花费的时间要长5倍。

您是如何创建EndingRoutesBussstop的?你能展示更多的代码吗?我肯定这个问题有几个重复:变量参数的重载会让每个人都失望…整数列表不同于整数数组的列表这个线程有一个相同的问题,有一个很好的解决方案:你如何创建EndingRoutesBussStops的可能重复?你能展示更多的代码吗?我确信这个问题有几个重复的地方:变量参数的重载会让每个人都失望…int的列表不同于int的数组列表这个线程也有同样的问题,有一个很好的解决方案:可能重复,但请注意,使用自动装箱/取消装箱是一个坏方法习惯。@MichalBorek我部分同意;)看看这个答案中的第一个和第二个例子。您希望在代码中找到什么?可读性很重要,有时比某些性能调整更重要(编译器迟早会处理这些调整)。也就是说,要当心这样的NPE:
int n=(new hashMap如果说到这个确切的例子,你是对的。但我只告诉你这是一个坏习惯:)它通常被过度使用(自动取消装箱/自动装箱)。然而,正如我认为你的例子非常适合学习:)。考虑:intx=otherArrayList.get(1);新建ArrayList()。添加(x)。因为“坏习惯”,我们有两次(联合国)拳击手术:)@MichalBorek在读了你最后的回复后,我基本上同意你的意见,但仍然认为你高估了自动装箱的成本,所以我想我应该写一个快速而肮脏的测试(见)。结果证明你是非常正确的。虽然可以说,这段代码是为了突出问题,但令人印象深刻的是,无论是否使用自动装箱,您的示例的执行时间始终要长5倍(至少在我的机器上)。Miquel我不确定我是否正确理解您,但在您粘贴的代码中,我看不到性能差异。但这一个:显示了差异,但要注意使用自动装箱/拆箱是一个坏习惯。@MichalBorek我部分同意;)看看这个答案中的第一个和第二个例子。您希望在代码中找到什么?可读性很重要,有时比某些性能调整更重要(编译器迟早会处理这些调整)。这就是说,要小心这样的NPE:
int n=(新的hashmap如果说到这个确切的例子,你是对的。但我只告诉你这是一个坏习惯:)它通常是(自动取消装箱/自动装箱)超过