HashMap与HashTable区别(Differences between HashMap and Hashtable)

翻译 2014年09月11日 15:02:26
在stackoverflow.com上看到这个标题

Differences between HashMap and Hashtable?

大意如下:

1,Hashtable是同步的,HashMap不是同步的。没有被同步的对象比同步的对象一般执行得更快,这使得HashMap更加适用于没有多线程的应用当中。
2,Hashtable不许与为null的键或者值。HashMap可以允许存在一个为null的键和任意多个null的值。
3,LinkedHashMap是一个HashMap的子类。对于一个LinkedHashMap,你可以按照预知迭代的顺序(按照默认插入的顺序),转换数据到HashMap。但是要转化为一个Hashtable可就难了。


如何来选用:

如果同步不是主要问题,推荐使用HashMap,如果同步问题是个问题,应该参照ConcurrentHashMap这个类。



There are several differences between HashMap and Hashtable in Java:

  1. Hashtable is synchronized, where as HashMap is not. This makes HashMap better for non-threaded applications, as unsynchronized Objects typically perform better than synchronized ones.

  2. Hashtable does not allow null keys or values. HashMap allows one null key and any number of null values.

  3. One of HashMap's subclasses is LinkedHashMap, so in the event that you'd want predictable iteration order (which is insertion order by default), you could easily swap out the HashMap for a LinkedHashMap. This wouldn't be as easy if you were using Hashtable.

Since synchronization is not an issue for you, I'd recommend HashMap. If synchronization becomes an issue, you may also look at ConcurrentHashMap.

类ConcurrentHashMap:

 ConcurrentHashMap和java.util.HashTable 类非常相似,  ConcurrentHashMap比  HashTable 有更好的并发性。 ConcurrentHashMap在读取数据的时候不会给 Map加锁 。除此之外, ConcurrentHashMap 在写入数据的时候,不锁住整个。 它只对Map中将要写入的数据的那一部分内存加锁

另一个不同点是如果ConcurrentHashMap在迭代的过程中改变了数据,ConcurrentHashMap 不抛出ConcurrentModificationException 异常。迭代器 Iterator 不是设计来为多线程使用的。

例子:

ConcurrentMap concurrentMap = new ConcurrentHashMap();

concurrentMap.put("key", "value");

Object value = concurrentMap.get("key");




HashTable和HashMap的区别详解

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

hashmap与Hashtable实现原理浅析

原文地址:http://www.cnblogs.com/lzrabbit/p/3721067.html#h1 HashMap和Hashtable的区别两者最主要的区别在于Hashtable是线程安全,...
  • Double2hao
  • Double2hao
  • 2016年11月30日 18:21
  • 3535

HashMap工作原理以及与HashTable的区别--面试题

每当往hashmap里面存放key-value对的时候,都会为它们实例化一个Entry对象,这个Entry对象就会存储在前面提到的Entry数组table中。现在你一定很想知道,上面创建的Entry对...
  • feicongcong
  • feicongcong
  • 2017年01月04日 13:15
  • 139

HashMap的实现原理及与 HashTable, Treemap的区别

Java中的接口Map由于是(K, V)键值对形式的存储结构,在编程中经常被用到,常用的实现类有:HashMap, HashTable, TreeMap.HashMap的实现原理:HashMap是数组...
  • y999666
  • y999666
  • 2016年05月25日 22:33
  • 1032

HashMap和HashTable异同点及使用场景

HashMap和HashTable异同点及使用场景 HashMap和HashTable异同点及使用场景 线程安全不同是否允许null值不同继承实现方式不同初始容量和扩容策略不同计算hash...
  • romantic_PK
  • romantic_PK
  • 2017年01月11日 00:32
  • 643

Java中Map接口HashMap与HashTable的区别及HashMap深入理解

HashMap和HashTable都完成了Map接口,实际上HashMap是HashTable轻量级实现(非线程安全的实现),对比于ArrayList和Vector的区别: HashMap和Array...
  • u012050154
  • u012050154
  • 2016年03月16日 15:29
  • 4503

C#hashtable使用说明 以及 Hashtable和HashMap的区别【总结性】

一,哈希表(Hashtable)简述    在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value...
  • mao_mao37
  • mao_mao37
  • 2016年07月13日 11:06
  • 3117

HashMap和Hashtable的实现原理

HashMap和Hashtable的底层实现都是数组+链表结构实现的,这点上完全一致 添加、删除、获取元素时都是先计算hash,根据hash和table.length计算index也就是tabl...
  • qq_29882585
  • qq_29882585
  • 2016年08月13日 10:45
  • 1955

Java集合源码剖析(二)【HashMap、Hashtable】

HashMap源码剖析HashMap简介    HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。    ...
  • gao_chun
  • gao_chun
  • 2015年08月16日 01:39
  • 1474

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

前面已经学习了Map的部分内容,主要是HashMap和HashTable,这一节我们来看看它们两有啥异同点。 1. HashMap和HashTable的相同点         HashMap和Hash...
  • eson_15
  • eson_15
  • 2016年04月26日 15:50
  • 3211
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HashMap与HashTable区别(Differences between HashMap and Hashtable)
举报原因:
原因补充:

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