首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Collections.reverse不能正常工作

Collections.reverse不能正常工作
EN

Stack Overflow用户
提问于 2018-05-27 23:55:22
回答 1查看 580关注 0票数 4

我定义了一个列表类,它像这样包装int[]。

代码语言:javascript
复制
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[]。

代码语言:javascript
复制
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));

结果是

代码语言:javascript
复制
list=[4, 2, 0, 1, 3]
reversed list=[4, 2, 0, 2, 4]
reversed array=[4, 2, 0, 2, 4]

有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 00:01:21

应该在set中返回已替换的元素

代码语言:javascript
复制
@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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50557566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档