当前位置:   article > 正文

HashSet、TreeSet、LinkedHashSet原理及线程安全的使用_hashset 线程安全

hashset 线程安全

一、原理

 

        1、HashSet

        hashset底层其实维护的是一个HashMap实例。底层数据结构是哈希表。综合了数组和链表的优点。其有以下等特点:

        (1) 不允许存放重复值的集合(通过hashCode()函数及equals()函数来判断是否重复)。

        (2)不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也可能发生变化 (内部维护的是hashmap,采用hash取模确定数组索引位置,然后在存入链表)。

        (3) HashSet是非线程安全的。

        (4) 集合元素值可以是nul。

  1. /**
  2. * 维护的hashMap实例
  3. */
  4. private transient HashMap<E,Object> map;
  5. /**
  6. * 无参构造器,创建一个hashMap实例,默认的加载因子是0.75
  7. */
  8. public HashSet() {
  9. map = new HashMap<>();
  10. }
  11. /**
  12. * 包含指定集合的构造函数
  13. */
  14. public HashSet(Collection<? extends E> c) {
  15. map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
  16. addAll(c);
  17. }
  18. /**
  19. * 指定初始容量及加载因子的构造函数
  20. */
  21. public HashSet(int initialCapacity, float loadFactor) {
  22. ma
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/955319
推荐阅读
  

闽ICP备14008679号