gpt4 book ai didi

java - Collections.reverse 不能正常工作

转载 作者:行者123 更新时间:2023-11-29 04:18:47 26 4
gpt4 key购买 nike

我定义了一个像这样包装 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]

问题是什么?

最佳答案

您应该在 set 中返回被替换的元素:

@Override public Integer set(int i, Integer e) { 
int res = array[i];
array[i] = e;
return res;
}

否则,return array[i] = e; 返回 e。这打破了 reverse,因为例如,在第一步中:

  • last 3 被替换的 4 覆盖
  • 返回 4 而不是 3
  • 这个4放在第一个位置
  • 您最终在第一个和最后一个元素中得到两个 4

关于java - Collections.reverse 不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557566/

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