集合框架源码分析(jdK1.7)(九) TreeSet

TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态

1.数据结构

private transient NavigableMap<E,Object> m;

初看可能会有些陌生

其实NavigableMap是一个接口

public class TreeMap<K,V>
   
extends AbstractMap<K,V>
   
implements NavigableMap<K,V>, Cloneable, java.io.Serializable

 

public class TreeSet<E> extends AbstractSet<E>
   
implements NavigableSet<E>, Cloneable, java.io.Serializable

 

TreeMap和TreeSet都实现了这个接口

所以和HashSet相同维护TreeSet的内部结构是一个Value=Object的TreeMap

2主要参数

private static final Object PRESENT = new Object();

扫描二维码关注公众号,回复: 1933181 查看本文章

//Value=Object的TreeMap

private transient NavigableMap<E,Object> m;

3.构造方法

public TreeSet() {
   
this(new TreeMap<E,Object>());
}

TreeSet(NavigableMap<E,Object> m) {
   
this.m = m;
}

初始化一个TreeMap<E,Object>

4. add(E e)

public boolean add(E e) {
   
return m.put(e, PRESENT)==null;
}

就是调用TreeMap的put方法其他方法也一样

5.TreeSet的特点

TreeMap是一个红黑树,所有节点都是有顺序的,所以TreeSet有序的,(插入的时候先比较按照二叉树插入,在旋转调整着色维持红黑树)

6案例TreeSet的遍历方式

public static void main(String[] args) {
   
TreeSet TreeSet =new TreeSet();
   
TreeSet.add("A");
   
TreeSet.add("C");
   
TreeSet.add("B");
   
TreeSet.add("D");
   
System.out.println(TreeSet);
   
//循环
   
for (Object a:TreeSet) {
       
System.out.print(a);
   
}
    System.out.println();
   
//迭代遍历
   
Iterator it=  TreeSet.iterator();
    while (it.hasNext()){
       
System.out.print(it.next());
   
}
    System.out.println();
   
//装换为数组遍历
  
Object objects[]= TreeSet.toArray();
   
for (int i=0;i<objects.length;i++){
       
System.out.print(objects[i]);
   
}
}

 

表明TreeSet是有序的



猜你喜欢

转载自blog.csdn.net/zpoison/article/details/80885036