gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:52:25 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com