读书人

关于hash地图的性能实现

发布时间: 2012-09-17 12:06:51 作者: rapoo

关于hashmap的性能实现

? 1.在哈希术语中,内部数组中的每个位置称作“存储桶”(bucket),而可用的存储桶数(即内部数组的大小)称作容量 (capacity)。 为使 Map 对象有效地处理任意数目的项,Map 实现可以调整自身的大小。 但调整大小的开销很大。 调整大小需要将所有元素重新插入到新数组中,这是因为不同的数组大小意味着对象现在映射到不同的索引值。 先前冲突的键可能不再冲突,而先前不冲突的其他键现在可能冲突。 这显然表明,如果将 Map 调整得足够大,则可以减少甚至不再需要重新调整大小,这很有可能显著提高速度。


???????? 2.关于HashMap的几个构造函数
??????????? HashMap( ):??????????????????????????????? //构造一个默认的散列映射
??????????? HashMap(Map m):??????????????????????????? //用m的元素初始化散列映射
?????????? HashMap(int capacity)?????????????????????? //将散列映射的容量初始化为capacity
?????????? HashMap(int capacity, float fillRatio):???? //用它的参数同时初始化散列映射的容量和填充比
?????????? 注意:散列映射并不保证它的元素的顺序。因此,元素加入散列映射的顺序并不一定是它们被迭代函数读出的顺序。
??
??????? 3.HashMap的性能因子
????????? 容量(capacity): 散列表中bucket的数量。
????????? 初始化容量(initial capacity): 创建散列表时bucket的数量。可以在构造方法中指定HashMap和HashSet 的初始化容量。
????????? 尺寸(size): 散列表中记录的数量。(数组的元素个数,非list中元素总和)
????????? 负载因子(load factor):???????????????????????????????????????????????????????????????????????????????????????????????????????????????????

?????????? (1)尺寸/容量。负载因子为0,表示空的散列表,0.5表示半满的散列表。轻负载的散列表具有冲突少,适宜插入与查询的特点,但是使用迭代器遍历会比较慢。较高的负载会减少所需空间大小。当负载达到指定值时,容器会自动成倍地增加容量,并将原有的对象重新分配,存入新的bucket中,这个过程称为“重列”。????

??????? (2)填充比(负载因子)必须介于0.0和1.0之间,它决定了在散列表向上调整大小之前散列表的充满度。具体地说,当元素的个数大于散列表的容量乘以它的填充比时,散列表被扩展。如果没有指定填充比,默认使用0.75,默认的容量是16。

读书人网 >编程

热点推荐