TreeMap
源码
解析:https://blog.csdn.net/qq_23211905/article/details/76691961
TreeMap底层是基于红黑树进行处理的。查询,插入,删除的时间复杂度为O(logN),插入和删除会牵扯到红黑树的左旋,右旋和着色。
TreeMap不是
线程安全的类。
TreeSet:
class="java" name="code">
private transient NavigableMap<E,Object> m;
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
public TreeSet() {
this(new TreeMap<E,Object>());
}
TreeSet源码中维护着一个NavigableMap,直接
创建对象的时候是创建一个TreeMap,因此TreeSet底层实现原理和TreeMap一样,都是红黑树实现的。
TreeSet和TreeMap的关系:TreeSet里面绝大部分方法都市直接调用TreeMap方法来实现的。
两者的区别:
相同点:
1:TreeMap和TreeSet都是非
同步集合,因此
他们不能在多线程之间共享,不过可以
使用方法Collections.synchroinzedMap()来实现同步。
2:运行速度都要比Hash集合慢,他们内部对元素的操作时间复杂度为O(logN),而HashMap/HashSet则为O(1)。
3:TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是拍好序的。
不同点:
1:最主要的区别就是TreeSet和TreeMap分别实现Set和Map
接口。
2:TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value(仅仅key对象有序)。
3:TreeSet中不能有重复对象,而TreeMap中可以存在。
: