带有原始数组的列表与带有对象数组的列表

时间:2019-04-11 13:09:33

标签: 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元素视为对象。请帮忙。

1 个答案:

答案 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);