首页 > 学院 > 开发设计 > 正文

TreeSet部分源码解析

2019-11-08 00:50:10
字体:
来源:转载
供稿:网友

TreeSet底层依赖TreeMap的实现

public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable { // 使用NavigableMap的key来保存Set集合的元素 PRivate transient NavigableMap<E, Object> m; // 使用一个PRESENT作为Map集合的所有 private static final Object PRESENT = new Object(); // 根据指定的NavigableMap对象创建Set集合 TreeSet(NavigableMap<E, Object> m) { this.m = m; } // 以自然排序方式创建TreeMap,使用该TreeMap的key来保存Set集合的元素 public TreeSet() { this(new TreeMap<E, Object>()); } // 以定制排序方式创建TreeMap,使用该TreeMap的key来保存Set集合的元素 public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator)); } public TreeSet(SortedSet<E> s) { // 调用前面的构造器,底层以TreeMap保存集合元素 this(s.comparator()); // 向TreeSet中添加SortedSet集合s的所有元素 addAll(s); }/* * TreeSet的其他方法都是直接调用TreeMap方法实现 */ public boolean addAll(Collection<? extends E> c) { // Use linear-time version if applicable if (m.size() == 0 && c.size() > 0 && c instanceof SortedSet && m instanceof TreeMap) { //将c集合强制转换为SortedSet集合 SortedSet<? extends E> set = (SortedSet<? extends E>) c; //将m集合强制转换为TreeMap集合 TreeMap<E, Object> map = (TreeMap<E, Object>) m; Comparator<?> cc = set.comparator(); Comparator<? super E> mc = map.comparator(); //如果cc和mc两个comparator相等 if (cc == mc || (cc != null && cc.equals(mc))) { //把Collection所有元素添加成TreeMap集合的key map.addAllForTreeSet(set, PRESENT); return true; } } //调用父类的addAll()方法来实现 return super.addAll(c); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表