HashTable和HashMap的不同主要有四種:
一、HashTable 是繼承java.util.Dictionary
HashMap 是繼承java.util.AbstractMap
Dictionary 是舊的class,
【DOC】NOTE: This class is obsolete.
New implementations should implement the Map interface, rather than
extending this class.
java.util.AbstractMap 已經implements Map Interface,因此繼承它的class
只需要實作它的method就可以實作出需要的Map (例如get,put,entrySet method)
可參:http://java.sun.com/j2se/1.4.2/docs/api/java/util/AbstractMap.html
java.util.Dictionary 並沒有去Implements Map Interface,HashTable是另外去
implements Map interface,也因此HashTable能被算在Java Util Framework中。
【DOC】" As of the Java 2 platform v1.2, this class has been retrofitted to implement Map, so that it becomes a part of Java's collection framework"
另外,Dictionary只提供最基本的abstract method
【DOC】"The Dictionary class is the abstract parent of any class, such as Hashtable, which maps keys to values"
二、HashMap 的Key跟Value都可以是null,HashTable則不行
也就是在HashMap裡可以這麼寫:
HashMap m = new HashMap();
m.put("1",null);
m.put(null, new Integer(2));
三、最大的不同是 HashTable的method是 Synchronized,而HashMap則沒有
【DOC】"Unlike the new collection implementations, Hashtable is synchronized."
因此有兩個情形要考慮:
(1)沒有Multithread的情形下,使用HashMap即可,因為HashTable有作Synchronization,相對地它的Performance是劣於HashMap的
(2)有Multithread情形時,如果要使用HashMap,要作外部的Synchronization
【DOC】"If multiple threads access this map concurrently, and at least one of the threads modifies the map structurally, it must be synchronized externally."
方法有很多種,API DOC裡提到可以對包含這個Map的Object作Synchronized
Map m = Collections.synchronizedMap(new HashMap(...));
四、HashMap拿掉了HashTable的contains(Object value)因為這個method容易造成混淆倒底是contains key還是value?? 這個method改用containsValue(Object value)取代掉了。
ref:http://psalter.spaces.live.com/blog/cns!F7AA90C7BB6EC803!124.entry
分享到:
相关推荐
经典讲解List和ArrayList和Vector和HashTable和HashMap区别
hashtable和hashmap的区别
HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别。HashMap、HashTable和HashSet是Java中常用的数据结构,它们的底层实现原理以及区别如下:HashMap底层实现原理: HashMap基于哈希表(HashTable)...
Hashtable和HashMap区别以及他们的具体介绍
记得刚毕业那会准备面试,看过不少面试题,里面有个说出HashMap和HashTable不同的题目,我那会面试的时候也遇到不少次这个问题,还隐约记得当时的回答是这样的: HashTable是比较旧的版本;HashTable是线程安全的,...
Hashtable和HashMap的区别: 1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类; 2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的...
比较分析Vector、ArrayList和hashtable hashmap数据结构
List、ArrayList、Vector及map、HashTable、HashMap分别的区别
第9讲 对比Hashtable、HashMap、TreeMap有什么不同?1
HashTable和HashMap主要的区别有:线程安全性,同步(synchronization),以及速度。接下来通过本文给大家简单介绍下HashTable和HashMap的区别,需要的的朋友参考下吧
比较Vector、ArrayList和hashtable hashmap
Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.
什么是HashSet? HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以...
hashMap和hashTable的区别,大家可以下载学习学习。
初级程序员面试经常问道的问题,HashMap与HashTable区别,希望有帮助
hashmap与hashtable区别 主要是应用于存值的数值对
Hashtable和HashMap的区别: Hashmap是开发中用的比较多的一种集合,是线程不安全的,Hashtable的方法上大多都加了synchronized所以是线程安全的,所以效率并不高。这也是它们最大的不同。 2.Hashtable继承的类和...
hashmap和hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 1. HashMap几乎可以等价于Hashtable,...
HashTable不支持空键值对! 而HashMap支持空键值对!
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础...