java - 包含原始数组的列表与包含对象数组的列表

标签 java arrays list

我有下面的代码用于交换。

public static <E> void swap(List<E> list, int i, int j){
        E temp = list.get(i);
        list.set(i, list.get(j));
        list.set(j, temp);
}

现在,当我使用由整数数组支持的列表时,如下所示

Integer[] ar = new Integer[]{1,2};      
swap(Arrays.asList(ar),1,0);

它工作正常,输出为 [2,1] 但我使用由 int 数组支持的 List,如下所示

int[] ar = new int[]{1,2};
swap(Arrays.asList(ar),1,0);

它抛出 ArrayIndexOutOfBounds 异常。我不明白为什么会发生这种情况。列表应仅将 int 元素视为对象。请一点帮助。

最佳答案

这就是正在发生的事情。您当前的代码实际上正在创建一个 List<Object> ,它恰好只包含一个 int[] ,不是实际整数的列表:

int[] ar = new int[]{1,2};
List<Object> list = Arrays.asList(ar);

ArrayIndexOutOfBounds的原因异常(exception)是您传递给 swap 的列表方法只有一个条目,位于索引零处。

无论如何,都不可能使用 Arrays.asList直接将基元数组转换为某种装箱类型的列表。您的代码的第一个版本是正确的,并且是您应该使用的:

Integer[] ar = new Integer[] {1, 2};
swap(Arrays.asList(ar), 1, 0);

关于java - 包含原始数组的列表与包含对象数组的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55633283/

相关文章:

java - 删除链表中大于运行时用户输入值的所有元素

C++,无法使用数组或 vector ,如何使用指针来解决这个问题?

java - 如何打印彼此相邻的二维数组矩阵的格式化字符串

基于元组第一个值的python求和元组列表

java - HIbernate 多对一连接条件查询

java - 将项目从一个 JComboBox 传输到另一个 JComboBox

javascript - 使用服务器 Java 和 Javascript 客户端的 Apache Thrift 数组

arrays - 如何在 mongoose/mongodb 的文档中获取对象数组中的对象?

java - 在Java中,不同类的列表?

c# - 如何创建一个通用方法来比较任何类型的两个列表。该类型也可以是类的列表