38各Set实现类的性能分析

Posted JustDo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了38各Set实现类的性能分析相关的知识,希望对你有一定的参考价值。

  HashSet和TreeSet是Set的两个典型实现,到底如何选择HashSet和TreeSet呢?HashSet的性能总是比TreeSet好(特别是最常用的添加、查询元素等操作),因为TreeSet小额外的红黑树算法来维护集合元素的次数。只有当需要一个保持排序的Set时,才应该用TreeSet,否则都应该使用HashSet。

  HashSet还有一个子类:LinkedHashSet,对于普通的插入、删除操作,LinkedHashSet比HashSet要略微慢一点,这是由维护链表所带来的额外开销造成的,但是由于有了链表,遍历LinkedHashSet会更快。

  EnumSet是所有Set实现类中性能最好的,但它只能保存同一个枚举类的枚举值作为集合元素

  必须指出的是,Set的三个实现类都是线程不安全的,如果有多个线程同时访问一个Set集合,并且有超过一个线程修改了该Set集合,则必须手动保证Set集合的同步性。通常可以通过Collections工具类的synchoronizedSortedSet方法来“包装”该Set集合。

以上是关于38各Set实现类的性能分析的主要内容,如果未能解决你的问题,请参考以下文章

关于set/map 等容器对string类的时间性能指标对比

Number 类及各子类所占字节数源码分析

Java Review (二十集合----- Set 集合)

Java Review (二十集合----- Set 集合)

讲透学烂二叉树:图中树的定义&各类型树的特征分析

LeetCode第38天 - 217. 存在重复元素