capacity是hashtable中桶的数码,capacity是hashtable中桶的数额

一.综述

能够直接依据hashcode值剖断七个对象是否等于吗?明确是不得以的,因为分歧的指标大概会转移同样的hashcode值。就算不可能依照hashcode值判别三个指标是还是不是等于,然而能够直接依据hashcode值决断五个目的不等,倘若五个指标的hashcode值不等,则势必是多少个例外的靶子。借使要咬定八个指标是还是不是确实相等,必须通过equals方法。

也便是说对于五个目的,假设调用equals方法获得的结果为true,则多个对象的hashcode值必定相等;假若equals方法赢得的结果为false,则三个对象的hashcode值不肯定分化;假若多个指标的hashcode值不等,则equals方法获得的结果料定为false;假如四个对象的hashcode值相等,则equals方法赢得的结果未知。 

HashMap和Hashtable不保险map的逐一,也不保证顺序不会随着时光不改变。

HashMap实例有多少个参数影响属性:开端capacity和load factor。capacity是hashtable中桶的数目,初步capacity就是hashtable成立时的capacity。load factor影响hashtable多满时允许自动扩充capacity。当hashtable中entry的数额抢先load
factor和当下capacity的乘积,hashtable会重新哈希(意味着,内部数据结构重建)因而hashtable大概具有桶数量的两倍。

用作通用规则,默许load factor(0.75)在时间和空中消耗上提供了好的衡量。值越大,空间开辟越小,然而遍历开销扩充(表以往大很多操作,包蕴get和put)。当设置早先capacity时,为了最小化重新hash的操作次数,应该思考map的entry数量和load factor。假如伊始容积超越最大entry数量除以load
factor,重新hash操作将不会时有爆发。但是,设置早先capacity太大会浪费空间。

借使过多mapping存款和储蓄在HashMap实例中,创制时选取丰盛大的capacity将允许mapping存款和储蓄得更有效能,因为不会趁机table的数量增大重新hash。注意使用过多如出壹辙hashCode()的key确定会降低任意hashtable的性质。

HashMap和Hashtable的同和分歧(详细相比较),hashmaphashtable

二.相同点

DEFAULT_LOAD_FACTOR

0.75

TREEIFY_THRESHOLD

8

UNTREEIFY_THRESHOLD

6

MIN_TREEIFY_CAPACITY

否则resize()

64

size

mapping数量

threhold

capacity*load factor

皇冠现金app,一.综述

能够一向依据hashcode值剖断八个目的是还是不是等于吗?确定是不可能的,因为差别的靶子大概会生成同样的hashcode值。尽管不可能遵照hashcode值判别多少个对象是或不是等于,可是足以从来依照hashcode值判定多少个对象不等,假若八个对象的hashcode值不等,则一定是四个分化的对象。若是要一口咬定多少个对象是还是不是真正相等,必须透过equals方法。

也便是说对于四个目的,借使调用equals方法获得的结果为true,则七个指标的hashcode值必定相等;倘使equals方法赢得的结果为false,则四个对象的hashcode值不分明分歧;假如七个目的的hashcode值不等,则equals方法获得的结果确定为false;若是四个指标的hashcode值相等,则equals方法赢得的结果未知。 

HashMap和Hashtable不保障map的相继,也不保障顺序不会趁着时间不改变。

HashMap实例有五个参数影响属性:起头capacity和load factor。capacity是hashtable中桶的数目,初步capacity正是hashtable创造时的capacity。load factor影响hashtable多满时允许自动增添capacity。当hashtable中entry的数额当先load
factor和脚下capacity的乘积,hashtable会重新哈希(意味着,内部数据结构重建)由此hashtable大概具备桶数量的两倍。

用作通用规则,暗中认可load factor(0.7伍)在时光和空中消耗上提供了好的度量。值越大,空间开拓越小,可是遍历开支扩展(表今后大多操作,包涵get和put)。当设置伊始capacity时,为了最小化重新hash的操作次数,应该考虑map的entry数量和load factor。即使开始容积超越最大entry数量除以load
factor,重新hash操作将不会时有发生。可是,设置开首capacity太大会浪费空间。

假如过多mapping存款和储蓄在HashMap实例中,创造时利用丰硕大的capacity将允许mapping存款和储蓄得更有效用,因为不会趁着table的数量增大重新hash。注意运用过多同样hashCode()的key显著会稳中有降任意hashtable的性质。

三.不同点

 

HashMap

Hashtable

线程安全

不安全

安全

允许null的键和值

允许

不允许

实现和继承

实现Map

实现Map,继承Dictionary

遍历方式

Iterator

Iterator和Enumeration

计算哈希值

(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)

(key.hashCode() & 0x7FFFFFFF)

计算数组下标

(length – 1) & hash

hash % length

DEFAULT_INITIAL_CAPACITY

16

11

容量增加方式

old*2

长度始终为2的幂

old*2+1

构造函数

threshold=tableSizeFor(initialCapacity)

threhold=initialCapacity*load factor

resize

从0-cap

链表顺序不变

从cap-0

链表顺序相反

 

算算数组下标:当length总是二的n次方时,h&(length-一)运算等价于对length取模,也正是h%length,然而&比%颇具更加高的频率。

体量扩充情势:当数主管度为2的n次幂的时候,不一样的key算得的index一样的可能率较小,那么数量在数组上分布就比较均匀,也便是说碰撞的可能率小。相对的,查询的时候就无须遍历有些地方上的链表,那样查询作用也就较高了。导致resize()分裂HashMap直接运用在此以前的数组下表,而Hashtable需求重新总计。

 

—[转]

二.相同点

DEFAULT_LOAD_FACTOR

0.75

TREEIFY_THRESHOLD

8

UNTREEIFY_THRESHOLD

6

MIN_TREEIFY_CAPACITY

否则resize()

64

size

mapping数量

threhold

capacity*load factor

三.不同点

 

HashMap

Hashtable

线程安全

不安全

安全

允许null的键和值

允许

不允许

实现和继承

实现Map

实现Map,继承Dictionary

遍历方式

Iterator

Iterator和Enumeration

计算哈希值

(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)

(key.hashCode() & 0x7FFFFFFF)

计算数组下标

(length – 1) & hash

hash % length

DEFAULT_INITIAL_CAPACITY

16

11

容量增加方式

old*2

长度始终为2的幂

old*2+1

构造函数

threshold=tableSizeFor(initialCapacity)

threhold=initialCapacity*load factor

resize

从0-cap

链表顺序不变

从cap-0

链表顺序相反

 

测算数组下标:当length总是二的n次方时,h&(length-一)运算等价于对length取模,约等于h%length,然而&比%具备更加高的功能。

容积扩张格局:当数首席施行官度为二的n次幂的时候,不一样的key算得的index同样的概率较小,那么数量在数组上遍布就比较均匀,也正是说碰撞的几率小。相对的,查询的时候就不用遍历有个别地点上的链表,那样查询功用也就较高了。导致resize()差异HashMap直接行使此前的数组下表,而Hashtable须要再行总结。

  —[转]

http://www.bkjia.com/Javabc/1209267.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1209267.htmlTechArticleHashMap和Hashtable的同和不同(详细比较),hashmaphashtable
1.综述 能够向来依照 hashcode
值判断八个对象是不是等于吗?明显是不得以的,因为不…

相关文章