hash table——散列表

本文详细介绍了散列表(哈希表)和散列图的基本概念及其工作原理,包括哈希函数的作用、如何处理哈希冲突等。此外,还对比了HashTable与HashMap之间的主要区别,如线程安全性、对null的支持、哈希值的处理方式等。
摘要由CSDN通过智能技术生成

hash table or hash map is a data structure that uses a hash function to map identifying values, known as keys(e.g., a person's name), to their associated values (e.g., their telephone number).

散列表或者散列图是一个数据结构,其利用哈希函数将相关的值映射到其标识的值那里。

The hash function is used to transform the key into the index (the hash) of an array element (the slot or bucket) where the corresponding value is to be sought.

哈希函数用来将键变成数组元素(时隙或者桶)的索引,在这些数组元素中我们可以找到对应的值。

Instead, most hash table designs assume that hash collisions—different keys that map to the same hash value—will occur and must be accommodated in some way.

哈希碰撞是经常要发生的,因为哈希函数并不总是能将不同的键映射到不同的数组元素中,偶尔会发生不同的键被映射到相同的数组元素中去。

A small phone book as a hash table.


以下引用的是网上关于hashTable和hashMap之间的一点区别:

HashTable的应用非常广 泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。 
1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。

2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。

3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。

4.HashTable使用Enumeration,HashMap使用Iterator。

以上只是表面的不同,它们的实现也有很大的不同。

5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);

static int hash(Object x) {
  int h = x.hashCode();

  h += ~(h << 9);
  h ^= (h >>> 14);
  h += (h << 4);
  h ^= (h >>> 10);
  return h;
}
static int indexFor(int h, int length) {
  return h & (length-1);
}
以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如
HashMap对null的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值