阿里面试实战题1----TreeSet,HashSet 区别

TreeSet,HashSet 区别

TreeSet

1 public class TreeSet<E> extends AbstractSet<E>
2     implements NavigableSet<E>, Cloneable, java.io.Serializable
3 {
4     public TreeSet() {
5         this(new TreeMap<E,Object>());
6     }  
7 }

 

可以从代码中明显看出。TreeSet的底层其实是TreeMap。

而TreeMap是一个有序的key-value集合,它是通过红黑树实现的。

TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparable 进行排序(实现其compareTo进行排序),具体取决于使用的构造方法。

TreeMap可以详细看这篇   TreeMap 还能排序?分析下源码就明白了

 

HashSet

1 public HashSet() {
2     map = new HashMap<>();
3 }

很明显,底层是HashMap实现。具体看这篇文章。基于JDK1.8的HashMap分析

 

TreeSet,HashSet 区别

  • TreeSet底层是TreeMap,HashSet底层是HashMap
  • TreeSet增加查找删除是O(lgn)。HashSet增加查找删除是O(1),最坏情况是O(n)
  • TreeSet底层TreeMap可以有序,HashSet底层HashMap一定无序。

 

posted @ 2019-08-05 21:39  程序员博博  阅读(590)  评论(0编辑  收藏  举报