【问题标题】:Why is LinkedList descendingIterator not returning results in Sorted order? [duplicate]为什么 LinkedList descendingIterator 不按排序顺序返回结果? [复制]
【发布时间】:2020-04-22 18:43:57
【问题描述】:

我最近发布了this question,我想我对 LinkedList 感到困惑。 我认为整个目的是能够以随机顺序添加信息并能够以排序顺序将其拉出。

所以,如果我有以下代码:

import java.util.*;
class Playground {
    public static void main(String[ ] args) {
        LinkedList<Integer> l = new LinkedList<>();
        l.add(3);
        l.add(9);
        l.add(1);
        l.add(5);
        //Iterator<Integer> i = ( Iterator<Integer>)((LinkedList<Integer>)l).descendingIterator();
        //Iterator<Integer> i = l.descendingIterator();
        //while (i.hasNext()) {
        //    System.out.println(i.next());
        //}
        while (l.descendingIterator().hasNext()) {
            System.out.println(l.descendingIterator().next());

        }
    }
}

或者这个的某个版本..(你可以看到我已经尝试了一些......我希望看到这个结果:

9
5
3
1
  • 我做错了什么?
  • 我应该如何修复代码?
  • 还有更好的解决方案吗?

我在这里的议程是保持我添加的排序,类似于 b 树。

这是我需要的解决方案。

import java.util.*;
class Playground {
    public static void main(String[ ] args) {
        TreeSet<Integer> l = new TreeSet<>();
        l.add(3);
        l.add(9);
        l.add(1);
        l.add(5);
        //Iterator<Integer> i = ( Iterator<Integer>)((LinkedList<Integer>)l).descendingIterator();
        //Iterator<Integer> i = l.descendingIterator();
        //while (i.hasNext()) {
        //    System.out.println(i.next());
        //}

        System.out.println(l.pollLast());

    }
}

【问题讨论】:

  • 你在哪里对列表进行排序?
  • 您要么对列表进行排序,要么使用排序集合。降序迭代器只反转列表的顺序顺序,而不是排序顺序。
  • 我认为重点是在您进行时为您维护排序。有点像 b-tree。
  • API 非常明确地说明了迭代器所做的事情。您可能想删除此问题。
  • while (l.descendingIterator().hasNext()) 将永远循环,因为您不断获得 new 迭代器并检查它是否有下一个,也就是 first 元素。

标签: java sorting linked-list


【解决方案1】:

根据 API:

以相反的顺序返回此双端队列中元素的迭代器

如果要对列表进行排序,则需要通过Collections.sort(....) 对其进行实际排序,或者使用树等排序集合。

【讨论】:

  • 感谢您使用 Tree 为我指明正确的方向。更新了我的帖子。
【解决方案2】:

descendingIterator 并不是方法的最佳名称。它以相反的顺序(从列表的末尾到开头)遍历列表。

如果您希望这些值按实际降序排列,则需要先对列表进行排序:

Collections.sort(l);

【讨论】:

  • 啊。对于我的困惑,你一针见血。
  • @Andreas 陷入了我的思路,感谢您的关注 - 已编辑和修复。我的观点仍然存在——这不是一个好名字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 2022-06-11
  • 2021-01-16
  • 1970-01-01
  • 2014-12-28
相关资源
最近更新 更多