1

我尝试使用 TreeSet 但它不允许双打有没有办法改变它?如果没有办法,我应该用什么来存储(等于和不等于)排序的元素?

4

5 回答 5

5

您可以使用List [特别是ArrayList] 来保存元素,并Collections.sort()在完成填充后使用它来对其进行排序。

有时 aPriorityQueue也是一个不错的选择 - 如果您真正需要的是维护集合中的最小/最大元素。

如果您想维护一个排序的集合 - SortedBag[来自 apache commons collections] 可能就是您所追求的。你可以从这里下载一个 jar并将它添加到你的类路径中,然后就可以使用它了!请注意,apache 产品非常常用,因此经常进行测试!

于 2012-04-15T21:40:53.360 回答
3

您可以为此目的使用SortedMultiset 。它包含在 Google 的 Guava 库中,您可以从以下网址下载:http ://code.google.com/p/guava-libraries/

如果您使用的是 Eclipse,则需要将 Guava 的 .jar 文件添加到项目的类路径中(右键单击项目,选择属性,然后选择 Java 构建路径,最后在库选项卡中添加 JAR)。

如果您不想在项目中使用第三方库,则取决于您的特定用例,最佳选择是什么。

于 2012-04-15T21:58:52.353 回答
0

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) { ... }
}
于 2012-04-15T21:47:22.967 回答
0

除了一个有序的List你仍然可以使用一个TreeSet但有额外的空间。

即为您尝试添加的任何重复项目保留一个计数器TreeSet
这种方法可以直接通过 aTreeMap来实现,以保持每次发生的计数器。

这样,您始终知道用户提供了多少重复项(计数器保持记录,而 TreeSet 只保存值本身)。
它有额外的空间开销,但在订购List时,您将有保留添加/删除等排序的开销。
取决于您的需要。

于 2012-04-15T21:47:23.280 回答
0

您可以使用树图。在映射中,您存储 {key,value} 对,而键是您的对象,值是您的集合中键的出现次数,例如,您有 3 次键“Bob”,因此相应的映射条目将是 {"Bob ", 3} . 通过这种方式,您可以节省空间并实现保持对象分类的目标。只需确保您的密钥实现了 tge equals 和 hashcode 方法。如果 yiur 键没有可用的自然顺序(例如字符串),您还必须为 thm 实现 Comparable 接口。

祝你好运!

于 2012-04-15T21:48:16.810 回答