hashmaphash在那里

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hashmaphash在那里相关的知识,希望对你有一定的参考价值。

hashmaphash在那里如下,在Java 2以前,一般使用Hashtable来映射键值和元素。为了使用Java集合框架,Java对Hashtable进行了重新设计,但是,为了向后兼容保留了所有的方法。Hashtable实现了Map接口,除了Hashtable具有同步功能之外,它与HashMap的用法是一样的。·在使用时一般是用ArrayList代替Vector,LinkedList代替Stack,HashMap代替HashTable,即使在多线程中需要同步,也是用同步包装类。另外在使用上还有一些小的差异,比如:
HashTable的key和value都不允许为null值,而HashMap的key和value则都是允许null值的。这个其实没有好坏之分,只是Sun为了统一Collection的操作特性而改进的。
HashTable有一个contains(Object value)方法,功能上与containsValue(Object value)一样,但是在实现上花销更大,现在已不推荐使用。而HashMap只有containsValue(Object value)方法。
HashTable使用Enumeration,HashMap使用Iterator。Iterator其实与Enmeration功能上很相似,只是多了删除的功能。用Iterator不过是在名字上变得更为贴切一些。模式的另外一个很重要的功用,就是能够形成一种交流的语言(或者说文化)。有时候,你说Enumeration大家都不明白,说Iterator就都明白了。
在实现上两者已有一些差异,这里简单说明一下:HashTable中构造hash数组时initialCapacity默认大小是11,增加的方式是 old*2+1。HashMap中构造hash数组时initialCapacity默认大小是16,而且一定是2的指数。对于哈希值的使用也有所不同,HashTable直接使用对象的hashCode,代码是这样的:而HashMap重新计算hash值,而且用与代替求模:
参考技术A hashmaphash在那里
此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。

HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。
参考技术B hashmaphash在那里
具体解答如下
hashmap hash在函数里可以找到。

以上是关于hashmaphash在那里的主要内容,如果未能解决你的问题,请参考以下文章

自定义HashMap实现

Java BAT大型公司面试必考技能视频-1.HashMap源码分析与实现

在 Java(或 Scala)中迭代 HashMap 的 HashMap

在Spring应用程序中在JSP中迭代HashMap的HashMap [重复]

hashmap性能跟数据量关系

如何在Java中访问嵌套的HashMaps?