维护排序的列表实现
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.*
注意:(更新4)我意识到这种列表的实现性能不足。有两种一般方法:
- 使用链接结构(排序)B树或类似
- 使用数组和插入(使用二进制搜索)
否 1.有 CPU 缓存未命中 2 号的问题。在数组中移动元素时出现问题。
UPDATE2:不起作用,因为它使用提供的比较器()来检查相等性,并基于它假设元素相等并排除它们。我只需要该比较器进行排序,而不是“唯一性”过滤(因为元素的自然排序不相等)TreeSet
MyComparator
UPDATE3:不能作为(我需要)工作,因为没有办法按照“排序”的顺序遍历它,要按排序顺序获取元素,您必须从集合中删除它们。PriorityQueue
List
更新:
类似的问题:
Java中Java
排序数组列表的良好排序列表