yanyy

    1.HashTable

  •  HashTable是线程安全的,但是效率特别低,因为当一个线程访问HashTable的同步方法时,其他线程再访问HashTable的同步方法,会发生阻塞

,如线程1在执行put操作时,线程2不但不能使用put,甚至不能使用get来获取数据,所以效率非常低下。

  • HashTable的键值都不能非空,否则会报空指针。
  • 实现线程安全的原理,是几乎HashTable的实现类的public方法都有synchronized来修饰。

    2.HashMap

  • HaspMap的实现原理是数组加链表,(1.8是数组+链表+红黑树)
  • 是线程不安全的集合,不能用于多线程多并发的情况,其不安全主要是多个线程在put或扩容时形成链表环,当通过get执行一个不存在的key时就有可能发生死循环。
  • 其中键值都可以为空,如果插入相同的键则会覆盖原有的
  • 通过key根据hashCode函数来算出hash值,(index =  HashCode(Key) &  (Length - 1))再用hash值取mod运算得到在数组中的位置,如果数组中该位置没有值则直接插入,反之,如果数组中有值, 则会插入链表中,当链表的个数超过8时,将链表转化为红黑树的结构。
  • 扩容,当数组中的键值对超过数组长度x0.75时,数组会自动扩容,一般是采用2倍扩容。

    3.HashSet

  • 存储的数据不可重复,原因是底层是采用HashMap来实现的,其中set的值作为HashMap的键存储,HashMap的值设定一个固定的静态常对象。

分类:

技术点:

相关文章:

  • 2021-10-17
  • 2022-02-09
  • 2021-05-23
  • 2021-10-15
  • 2021-10-15
  • 2021-10-15
  • 2021-06-12
猜你喜欢
  • 2021-08-24
  • 2021-12-28
  • 2021-11-21
  • 2021-04-03
  • 2021-12-15
  • 2021-11-03
相关资源
相似解决方案