【发布时间】: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