> 文章列表 > HashSet,LinkedHashset, TreeSet的比较

HashSet,LinkedHashset, TreeSet的比较

HashSet,LinkedHashset, TreeSet的比较

Set的三个实现类特点:

  • 不允许元素重复
  • 都不是线程安全

HashSet

查询效率极高(高于数组),用的最多,底层是HashMap的一个实例。

  • 判断两个对象是否相等的规则:
    1)equals()返回值为true
    2)hashcode()值相同。

  • 要求:
    存在于哈希表中的对象元素都必须要覆盖 equals(),和hashCode()方法。
    链表算法

LinkedHashSet 

  • HashSet的子类,底层采用了哈希表算法保证元素对象不重复和链表算法记录元素对象的先后添加顺序。
  • LinkedHashSet主要适用于对于元素的添加顺序读取有要求的场景,比如FIFO这样的场景。
  • 至于性能方面,LinkedHashSet插入性能略低于HashSet,但在迭代访问set里面的全部元素时有很好的性能。
  • 在开发中一般很少使用。

TreeSet

只有在做范围查询时才会使用,会对集合里的元素进行排序,底层使用了红黑树算法(树结构比较擅长做范围查询)

总结

1.HashSet是最常用的,做等值查询效率最高,在开发中,最常用到的就是等值查询。
2.TreeSet做范围查询效率较高,在数据库的索引中,范围查询较多,所以树结构主要用来做索引,来提高查询效率。
3.LinkedHashSet在一个集合既不能元素重复,又要记录元素的添加顺序时使用。一般使用较少。