我尝试使用 TreeSet 但它不允许双打有没有办法改变它?如果没有办法,我应该用什么来存储(等于和不等于)排序的元素?
5 回答
您可以使用List
[特别是ArrayList
] 来保存元素,并Collections.sort()
在完成填充后使用它来对其进行排序。
有时 aPriorityQueue
也是一个不错的选择 - 如果您真正需要的是维护集合中的最小/最大元素。
如果您想维护一个排序的集合 - SortedBag
[来自 apache commons collections] 可能就是您所追求的。你可以从这里下载一个 jar并将它添加到你的类路径中,然后就可以使用它了!请注意,apache 产品非常常用,因此经常进行测试!
您可以为此目的使用SortedMultiset 。它包含在 Google 的 Guava 库中,您可以从以下网址下载:http ://code.google.com/p/guava-libraries/
如果您使用的是 Eclipse,则需要将 Guava 的 .jar 文件添加到项目的类路径中(右键单击项目,选择属性,然后选择 Java 构建路径,最后在库选项卡中添加 JAR)。
如果您不想在项目中使用第三方库,则取决于您的特定用例,最佳选择是什么。
ASet
根据定义不允许重复。
你需要有不同的Comparator
,或者你可以使用任何一种List
。
SortedSet<String> temp = new TreeSet<String>(new MyComparator());
在哪里MyComparator
实现Comparator
:
public class MyComparator implements Comparator<String> {
public int compare(String a, String b) { ... }
}
除了一个有序的List
你仍然可以使用一个TreeSet
但有额外的空间。
即为您尝试添加的任何重复项目保留一个计数器TreeSet
。
这种方法可以直接通过 aTreeMap
来实现,以保持每次发生的计数器。
这样,您始终知道用户提供了多少重复项(计数器保持记录,而 TreeSet 只保存值本身)。
它有额外的空间开销,但在订购List
时,您将有保留添加/删除等排序的开销。
取决于您的需要。
您可以使用树图。在映射中,您存储 {key,value} 对,而键是您的对象,值是您的集合中键的出现次数,例如,您有 3 次键“Bob”,因此相应的映射条目将是 {"Bob ", 3} . 通过这种方式,您可以节省空间并实现保持对象分类的目标。只需确保您的密钥实现了 tge equals 和 hashcode 方法。如果 yiur 键没有可用的自然顺序(例如字符串),您还必须为 thm 实现 Comparable 接口。
祝你好运!