为什么 LinkedList 降序迭代器不按排序顺序返回结果?



我最近发布了这个问题,我想我对LinkedList感到困惑。 我认为整个目的是能够按 randon 顺序添加信息,并能够按排序顺序将其拉出。

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

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());
}
}

根据 API:

按反向顺序返回此双端格式元素的迭代器

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

descendingIterator

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

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

Collections.sort(l);

相关内容

  • 没有找到相关文章

最新更新