我定义了一个包含int []的列表类。
class IntList extends AbstractList<Integer> {
private final int[] array;
public IntList(int[] array) { this.array = array; }
@Override public int size() { return array.length; }
@Override public Integer get(int i) { return array[i]; }
@Override public Integer set(int i, Integer e) { return array[i] = e; }
}
我试图反转int []。
int[] array = {4, 2, 0, 1, 3};
List<Integer> list = new IntList(array);
System.out.println("list=" + list);
Collections.reverse(list);
System.out.println("reversed list=" + list);
System.out.println("reversed array=" + Arrays.toString(array));
结果
list=[4, 2, 0, 1, 3]
reversed list=[4, 2, 0, 2, 4]
reversed array=[4, 2, 0, 2, 4]
有什么问题?
答案 0 :(得分:3)
您应该在set
中返回已替换的元素:
@Override public Integer set(int i, Integer e) {
int res = array[i];
array[i] = e;
return res;
}
否则,return array[i] = e;
会返回e
。这打破了reverse
,例如,在第一步中:
3
会覆盖4
4
而不是3
4
位于第一个位置4
。