java中Hashset,hashtable的底层实现原理

1>hashset底层

1>底层的数据结构:底层调用new hashmap(),和Hashmap具有相同的数据结构。

 2>Hashset在进行存储元素时,元素不重复,通过调用底层的hash(key)得到在Hash表中的存储位置,如果该位置无元素,进行添加,如果存在元素,调用equals方法进行比较,如果为true,元素重复,不进行添加,如果为false.元素可进行添加

 3>底层其实调用的Hashmap的方法,以hashmap为准进行存放数据,该数据的值就是底层hashmap的key,在进行爹爹其实就是迭代hashmap的key:mapkeyset();方法

2>hashtable底层

  1>底层的数据结构和Hashmap一样

  2>线程安全性,线程安全,方法都被synchionized所修饰

   3>在存放数据不容许存放null值

   4>由于是线程安全性,在进行访问hashtable时候,需要得到synchrinized的锁,才能进行增加,删除,改,,查

   5>在进行添加元素和查找元素的时候,和hashmap的不同就是需要得到锁,且不能存放null值

总结  hashmap  hashtable的区别

    1>线程安全:hashmap线程不安全,hashravle线程安全

    2>底层的数据结构:数组+链表

    3>存放元素:hashmap容许存放一个null值,且该Null值在数组的index为0处,hashtable不容许存放null值

    4>在多线程进行访问时,hashmap都可以被访问,而hashtable需要得到锁,其他线程处于阻塞状态

猜你喜欢

转载自blog.csdn.net/w5201314ws6123/article/details/87910412