TreeSet介绍
- 集合中的元素没有重复
- 集合中的元素不保证插入顺序,而是默认使用元素的自然排序,不过可以自定义排序器
- jdk8以后,集合中的元素不可以是null
- 集合不是线程安全
- 相对于HashSet, 性能更差
- TreeSet底层就是TreeMap,维护了一个红黑树
TreeSet提供了四种构造器
代码实例
public static void main(String[] args) {
TreeSet treeSet = new TreeSet();
//添加数据。
treeSet.add( "jack");
treeSet.add( "tom" );
treeSet.add( "sp");
treeSet.add( "a" );
System.out.println( "treeSet=" + treeSet);
}
treeSet=[a, jack, sp, tom]
public static void main(String[] args) {
//2、老师希望添加的元素,按照字符串大小来排序
//3、使用 TreeSet 提供的一个构造器,可以传入一个比较器(匿名内部类),并指定排序规则
TreeSet treeSet = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
//调用String 的 compareTo 方法进行字符串大小比较
return ((String) o2).compareTo((String) o1);//降序
//return ((String) o1).compareTo((String) o2);//升序
}
});
//添加数据。
treeSet.add( "jack");
treeSet.add( "tom" );
treeSet.add( "sp");
treeSet.add( "a" );
System.out.println( "treeSet=" + treeSet);
}
}
treeSet=[tom, sp, jack, a]
TreeSet总结
- 底层是在TreeMap的基础上进行封装,所以结构是红黑树;
- 因为是红黑树结构,所以不需要重写hashCode()和equals()方法来保证唯一性;
- TreeMap有的特性TreeSet都有,还在这个基础上增加了保证元素唯一性的特点。