HashTable和HashMap的区别

原创 2004年09月21日 19:52:00
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的操作。

HashTable和HashMap的区别详解

一、HashMap简介       HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。       Has...
  • fujiakai
  • fujiakai
  • 2016年06月04日 19:35
  • 38689

HashMap和Hashtable的详细区别

HashMap和Hashtable的区别 两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。Hashtable的实现方法里面都添加了synchronized关键字来确保线...
  • qq_35181209
  • qq_35181209
  • 2017年07月05日 22:14
  • 398

java 中 HashMap 与HashTable之间的区别

java 中HashMap 与HashTable之间的区别? 非线程应用中哪个更有效率?
  • napoleonjk
  • napoleonjk
  • 2015年04月22日 16:45
  • 700

Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较

HashMap和HashTable的区别一种比较简单的回答是: (1)HashMap是非线程安全的,HashTable是线程安全的。 (2)HashMap的键和值都允许有null值存在,而HashTa...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年09月25日 15:56
  • 15767

HashMap底层实现原理---HashMap与HashTable区别

①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算...
  • w433668
  • w433668
  • 2017年07月28日 23:38
  • 246

HashMap和Hashtable以及TreeMap的区别

最近用到了这三种集合类,由于不是很熟练,所以想整理下。而且前段时间面试,一般情况下面试官喜欢问HashMap和Hashtable的主要区别,其用意是想问被面试者这俩那个是线程安全的。但是HashMap...
  • horero
  • horero
  • 2016年12月19日 11:47
  • 813

最全面的HashMap和HashTable的区别

找工作期间不少企业都会问到有关HashMap和HashTable两者直接的区别,很多博客里虽然有提及但总是没有那么全面,只是一些常用的不同,现在就我自己所总结的比较全面的不同,归纳以下:...
  • sherry_unique
  • sherry_unique
  • 2016年11月24日 10:22
  • 249

java集合框架12——HashMap和HashTable的区别

前面已经学习了Map的部分内容,主要是HashMap和HashTable,这一节我们来看看它们两有啥异同点。 1. HashMap和HashTable的相同点         HashMap和Hash...
  • eson_15
  • eson_15
  • 2016年04月26日 15:50
  • 3323

从Java源码的角度来分析HashMap与HashTable的区别

由于HashMap与HashTable都是用来存储Key-Value的键值对,所以经常拿来对比二者的区别,下面就从源码的角度来分析一下HashMap与HashTable的区别,...
  • a_woxinfeiyang_a
  • a_woxinfeiyang_a
  • 2016年06月02日 17:49
  • 1362

HashTable, HashSet, HashMap的区别

hash是一种很常见也很重要的数据结构,是用hash函数根据键值(key)计算出存储地址,以便直接访问。由完美hash函数(即键值和地址是一一对应的)计算出的地址,在访问时,时间复杂度为O(1)。 j...
  • xxgujh
  • xxgujh
  • 2015年08月03日 22:23
  • 5465
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HashTable和HashMap的区别
举报原因:
原因补充:

(最多只允许输入30个字)