Java 带基元数组的列表与带对象数组的列表

Java 带基元数组的列表与带对象数组的列表,java,arrays,list,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); } 它工作正常,输出为[2,1] 但我使用由int数组支持的列表,如下所示 Integer[] ar = new Integer[]{1,2};

我有下面一段代码用于交换

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);
}
它工作正常,输出为
[2,1]
但我使用由int数组支持的列表,如下所示

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

它引发ArrayIndexOutOfBounds异常。我不明白为什么会这样。列表应仅将int元素视为对象。请帮点忙。

下面是正在发生的事情。您当前的代码实际上正在创建一个
列表
,该列表恰好只包含一个
int[]
,而不是实际整数的列表:

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

添加一些垃圾文本以满足发布问题的最低要求是荒谬的。谢谢Aniket。喜欢你的回答:)@AniketSahrawat我真的很惊讶竟然需要垃圾短信。当然,我今天看到了一些较短的问题,所以这不能仅仅是长度要求。@TimBiegeleisen我认为这是考虑的代码与文本的比率。不过,我从来没有真正读过。如果是文本与代码的比率,@UtpalKumar如果没有将他的大部分问题包含在代码块中就应该可以了。在这两种情况下,即原语和包装器对象数组中,我只将数组对象引用传递给swap方法,在这里它被视为列表并由列表对象引用。我仍然不明白我是如何传递一个int[]。这是否与两个数组的内部结构有关。这就是问题所在,
被视为List
并不意味着它的作用。在不指定类型的情况下调用
Arrays.asList
的方式意味着它默认为
List
,其中一个条目用于基本数组。它不“知道”你想要一个整数列表。我想你是对的,当我这样做时,“int[]ar1=newint[]{1,2};System.out.println(Arrays.asList(ar1.size());”它返回1。
Integer[] ar = new Integer[] {1, 2};
swap(Arrays.asList(ar), 1, 0);