我定义了一个列表类,它像这样包装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]有什么问题吗?
发布于 2018-05-28 00:01:21
应该在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而不是34放在第一个位置4。https://stackoverflow.com/questions/50557566
复制相似问题