Java 中是否有现有的List
实现基于提供的顺序来维护Comparator
?
可以通过以下方式使用的东西:
Comparator<T> cmp = new MyComparator<T>();
List<T> l = new OrderedList<T>(cmp);
l.add(someT);
以便someT
插入,以便列表中的顺序根据cmp
(根据@andersoj 的建议,我又提出了一个要求来完成我的问题)
此外,我希望能够在不删除元素的情况下按排序顺序遍历列表,即:
T min = Const.SMALLEST_T;
for (T e: l) {
assertTrue(cmp.compare(min, e) >= 0);
min = e;
}
应该通过。
欢迎所有建议(除了告诉我Collections.sort
在无序的完整列表中使用),不过,我更喜欢其中java.*
或最终的东西,org.apache.*
因为此时很难引入新的库。
注意:(UPDATE4)我意识到这种列表的实现会性能不足。有两种通用方法:
- 使用链接结构(某种)B-tree 或类似的
- 使用数组和插入(使用二分查找)
1. CPU 缓存未命中有问题 2. 数组中的元素移位有问题。
UPDATE2:
TreeSet
不起作用,因为它使用提供的比较器 (MyComparator
) 来检查是否相等,并基于它假定元素相等并排除它们。我只需要比较器进行排序,而不是“唯一性”过滤(因为元素的自然排序不相等)
UPDATE3:
PriorityQueue
不工作List
(因为我需要),因为没有办法按“排序”的顺序遍历它,要按排序顺序获取元素,您必须将它们从集合中删除。
更新:
类似的问题:
A good Sorted List for Java
Sorted array list in Java