我有以下用于交换的代码。
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元素视为对象。请帮忙。
答案 0 :(得分:2)
这是正在发生的事情。您当前的代码实际上是在创建List<Object>
,它恰好只包含一个int[]
,而不是实际整数的列表:
int[] ar = new int[]{1,2};
List<Object> list = Arrays.asList(ar);
发生ArrayIndexOutOfBounds
异常的原因是,您传递到swap
方法的列表只有一个条目,索引为零。
在任何情况下,都不可能使用Arrays.asList
直接将基元数组转换为某种盒装类型的列表。您的代码的第一个版本是正确的,并且应该使用:
Integer[] ar = new Integer[] {1, 2};
swap(Arrays.asList(ar), 1, 0);