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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值