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如何判断元素是不是相同