hashCode,equals,Map

hashCode,equals都是属于Object类里面的方法,hashCode是根据内存地址通过算法计算出来的散列码,equals是比较对象的内存地址是否相同。equals相等的对象,其hashCode一定相等,hashCode相等的对象,equals不一定相等。hashCode和equals会应用于HashSet,HashMap,HashTable这一类的散列集合,所以一般自定义实现equals的时候也要重新实现hashCode方法。实现equals时候需要注意通用约定,自反性(a.equals(a) == true),对称性(a.equals(b) == true; b.equals(a) == true),传递性(a.equals(b) == true; b.equals(c) == true; a.equals(c) == true),一致性(参与比较的对象引用没有发生变化,其结果也不会变),非空性(a.equals(null) == false)

HashMap

内部通过数组和链表实现,保存一个新的对象,先根据hashCode计算出hash,再通过hash计算出对应于存放数组的下标,如果当前位置已经有对象,则通过链表的形式,进行链接,然后将原来的值替换成插入的值。

HashMap&HashTable

HashMap不是线程安全的,HashTable是线程安全的,HashMap允许key,value都为null,HashTable则都不允许。

ConcurrentHashMap&HashTable

同样适用于多线程的环境,但是当容量增加到一定程度的时候,HashTable的性能会下降很多,应该迭代器遍历的时候,会锁住整个表,而ConcurrentHashMap仅仅锁住部分map

 

转载于:https://my.oschina.net/u/2308196/blog/3018318

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值