集合15-TreeSet源码简析

TreeSet基于TreeMap实现,是自平衡有序的set集合


集合15-TreeSet源码简析_第1张图片

TreeSet特性

  1. 非线程安全的集合
  2. 保证迭代按照指定顺序进行迭代(排好序的方式)
  3. 没有任何重复元素的集合,底层通过TreeSet来实现,对TreeSet元素的操作都映射到TreeMap的key上(迭代,查找等等)。
  4. 基于TreeMap的统计功能,可以对Set进行统计操作

TreeSet实现原理

默认使用TreeMap作为底层的有序Map,也可以在构造函数将其指定为NavigableMap

集合15-TreeSet源码简析_第2张图片

方法列表

TreeSet的方法都是通过代理TreeMap的方法来实现的,TreeSet方法比较简单,给出方法列表

集合15-TreeSet源码简析_第3张图片
  1. 有方法列表可知,TreeSet并没有实现随机访问的方法,即不能通过get(int index)方法获取指定位置上的元素,可以通过iterator()方法和descendingIterator()进行迭代访问。

  2. 但是相对于HashSet提供了大量关于排序和统计相关的方法,如支持升序降序遍历符合某一条件的子set集合等等。

add方法

集合15-TreeSet源码简析_第4张图片

在TreeSet集合中添加一个元素 e 相当于在TreeMap中添加一个key为e,value为Object类型引用的Entry节点。

和HashSet的add方法一模一样。

HashSet与TreeSet

相同点

  1. 满足set集合的所有特性
  1. 非线程安全
  2. 不支持随机访问

不同点

  1. HashSet不支持排序和统计相关的操作,而TreeSet支持,如降序迭代,返回满足某一条件的子集,第一个元素、最后一个元素等等。

你可能感兴趣的:(集合15-TreeSet源码简析)