我很困惑,我找不到一个快速的答案。我本质上是在 Java 中寻找一个数据结构,它实现了 java.util.List接口,但是以排序的顺序存储它的成员。我知道你可以使用一个正常的 ArrayList和 Collections.sort(),但我有一个场景,我偶尔添加和经常检索成员从我的列表,我不想要排序,每次我检索一个成员,以防一个新的已经被添加。有人能告诉我 JDK 甚至第三方库中存在这样的东西吗?
EDIT : 数据结构将需要保留重复内容。
答案的总结 : 我发现这一切都很有趣,学到了很多东西。Aioobe 特别值得一提,因为他坚持不懈地试图达到我上面的要求(主要是一个分类的 java.util。支持重复的列表实现)。我已经接受了他的回答,认为他的回答对于我所问的问题是最准确的,对于我所寻找的东西的含义也是最发人深省的,即使我所问的并不完全是我所需要的。
我所要求的问题在于 List 接口本身和接口中可选方法的概念。引用 javadoc 的话:
此接口的用户可以精确控制列表中每个元素的插入位置。
插入到已排序列表中并不能精确控制插入点。然后,您必须考虑如何处理其中的一些方法。以 add为例:
Public boolean add (对象 o)
Appends the specified element to the end of this list (optional operation).
你现在处于任何一种不舒服的境地
1)打破合同,实现添加的排序版本
2)让 add添加一个元素到列表的末尾,打破你的排序顺序
3)通过抛出一个 UnsupportedOperationException并实现另一个按排序顺序添加项目的方法,将 add(作为可选项)排除在外。
选项3可能是最好的,但是我发现一个不能使用的 add 方法和另一个不在接口中的 sortedAdd 方法令人讨厌。
其他相关解决方案(不分先后) :
add(Object obj)方法中实现排序打破了 List 接口的约定,并且奇怪地对 add(int index, Object obj)没有效果方法。一般共识认为,在这种情况下,throw new UnsupportedOperationException()可能是一个更好的选择。Warning: This class breaks the contract required by List中有一个警告