java TreeSet能存放两个相同的元素吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java TreeSet能存放两个相同的元素吗?相关的知识,希望对你有一定的参考价值。

TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。(比较的前提:两个对象的类型相同),也就是说TreeSet是不能存放两个相同的元素的。
TreeSet继承于Set,而Set这个集合本身是不能存放两个相同的元素的。
参考技术A

可以存放重复的,关键是看的比较器,只是一般不这么做而已,保留重复就失去set集合无重复的特点。

TreeSet<String> ts = new TreeSet<>(new Comparator<String>() 
    @Override
    public int compare(String s1, String s2) 
        int num = s1.compareTo(s2);       //比较内容为主要条件
        return num == 0 ? 1 : num;        //保留重复
    
);

ts.add("lp");
System.out.println(ts);
ts.add("lp");
System.out.println(ts);

输出结果:

[lp]

[lp, lp]

一个有趣的例子,TreeMap的键值,如果按照上面那样,是否也会重复,那key重复,又如何查询到对应的value,其实所谓的“重复”,按照比较器的定义,即使是相同的也认为是“不同”了。 感兴趣可以看下TreeMap 里面 get方法的源码,从源码可以分析到,“重复的key”用get方法获取的值肯定是null。

参考技术B TreeSet 是set的子类,Set具有元素不可重复性,所以TreeSet也是,不可方2个相同的元素。本回答被提问者和网友采纳

以上是关于java TreeSet能存放两个相同的元素吗?的主要内容,如果未能解决你的问题,请参考以下文章

java treeset和hashset如何判断元素是不是相同

Java集合 -- HashSet 与TreeSet和LinkedHashSet的区别

java学习第17天(TreeSet HashSet)

Java类集-set

java学习之treeset

TreeSet类的排序问题