我需要一个 Collection
来对元素进行排序,但不删除重复元素。
我选择了 TreeSet
,因为 TreeSet
实际上将值添加到支持的 TreeMap
:
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
并且 TreeMap 使用 Comparators
compare
逻辑删除重复项
我编写了一个 Comparator
,它在元素相等的情况下返回 1 而不是 0。因此,在元素相等的情况下,带有此 Comparator
的 TreeSet
不会覆盖重复项,只会对其进行排序。
我已经针对简单的 String
对象对其进行了测试,但我需要一组自定义对象。
public static void main(String[] args)
{
List<String> strList = Arrays.asList( new String[]{"d","b","c","z","s","b","d","a"} );
Set<String> strSet = new TreeSet<String>(new StringComparator());
strSet.addAll(strList);
System.out.println(strSet);
}
class StringComparator implements Comparator<String>
{
@Override
public int compare(String s1, String s2)
{
if(s1.compareTo(s2) == 0){
return 1;
}
else{
return s1.compareTo(s2);
}
}
}
这个方法好还是有更好的方法来实现这个?
编辑
实际上我有一个以下类的 ArrayList:
class Fund
{
String fundCode;
BigDecimal fundValue;
.....
public boolean equals(Object obj) {
// uses fundCode for equality
}
}
我需要所有具有最高 fundValue
的 fundCode
最佳答案
您可以使用 PriorityQueue。
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>();
PriorityQueue()
:创建一个具有默认初始容量 (11) 的 PriorityQueue,它根据元素的自然顺序对其元素进行排序。
这是文档的链接:https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html
关于java - 允许重复的 TreeSet 或 TreeMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22251787/