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需要得到锁,其他线程处于阻塞状态