java - 允许重复的 TreeSet 或 TreeMap

标签 java collections treemap treeset

我需要一个 Collection 来对元素进行排序,但不删除重复元素。

我选择了 TreeSet,因为 TreeSet 实际上将值添加到支持的 TreeMap:

public boolean add(E e) {
    return m.put(e, PRESENT)==null;
}

并且 TreeMap 使用 Comparators compare 逻辑删除重复项

我编写了一个 Comparator,它在元素相等的情况下返回 1 而不是 0。因此,在元素相等的情况下,带有此 ComparatorTreeSet 不会覆盖重复项,只会对其进行排序。

我已经针对简单的 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
    }
}

我需要所有具有最高 fundValuefundCode

最佳答案

您可以使用 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/

相关文章:

java - 将整数数组写入文件

java - 使用 Lambda 表达式将列表转换为 map 不起作用

c# - 为什么这段代码抛出 'Collection was modified' ,但是当我在它之前迭代一些东西时,它却没有?

Java按有序值打印TreeMap

java - 为什么 Java 的 TreeMap 不允许初始大小?

Java - 按 block 读取文件?

java - 四舍五入到小数点后 2 位总是返回 0.0

java - 兼容php和java的json-rpc实现并支持ssl

collections - 按名称获取 Jekyll 收藏品的优雅方式?

java - 为什么这个数组会不一致地越界?