TreeMap

[size=large][align=center]TreeMap[/align][/size]
源码解析:[url]https://blog.csdn.net/qq_23211905/article/details/76691961[/url]

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中可以存在。
:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值