`

TreeMap

阅读更多
TreeMap

源码解析:https://blog.csdn.net/qq_23211905/article/details/76691961

        TreeMap底层是基于红黑树进行处理的。查询,插入,删除的时间复杂度为O(logN),插入和删除会牵扯到红黑树的左旋,右旋和着色。

TreeMap不是线程安全的类。

TreeSet:
    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中可以存在。
:
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics