HashMap和HashTable的区别
HashMap可以存储键值为Null的值。
HashTable不能存储键值为Null的值。
HashMap是非同步的,是线程不安全的。
HashTable是同步的,是线程安全的。
HashMap默认大小为16,并且一定为2的指数。
HashTable默认大小为11,并且增长规律为old*2+1。
HashMap的工作是什么原理
put()方法,先使用hashcode()方法计算key的hashcode,然后根据hashcode找到bucket位置,存储Entry对象,如果hashcode和其他的相同,那么使用Linklist,依次存储entry。
get()方法,使用hashcode()方法得到key的hashcode,然后遍历LinkedList使用key.equal()找出bucket中的具体entry,最后得到值。
什么HashMap的默认容量和负载因子(load factor)
默认容量为16,负载因子为0.75。
如果HashMap超过了负载因子,这时候该怎么办?
调用 rehash方法,将默认容量变为2倍的bucket数组,将原来的bucket数组元素放入心得bucket数组中。
为什么使用Double Integer等wrapper 类当做key比较好。
wrapper类有不可变性的性质,即放入和取出的hashcode不会改变,而且已经重写了equals和hashcode方法。并且如果两个不相等的对象返回不同的hashcode的话,那么碰撞的几率就会小些,这样就能提高HashMap的性能。
可以使用自定义对象作为key吗?
可以的,满足两个特性:不可变性和重写两个方法。
当对象插入到Map中之后将不会再改变了。并且重写equals和hashcode方法即可。
本文探讨了HashMap和HashTable在Java中关键区别,包括对null值的支持、线程安全性、容量调整机制以及为何使用wrapper类作为key。还介绍了如何利用它们的特性,如不可变性和自定义key的要求。
2957

被折叠的 条评论
为什么被折叠?



