【集合】HashTable和HashMap的区别
2015-02-16 11:26
253 查看
Hashtable和HashMap类有三个重要的不同之处。
第一个不同主要是历史原因。
Hashtable是基于陈旧的Dictionary类的,
HashMap是Java 1.2引进的Map接口的一个实现。
第二个不同,也许最重要的不同是同步的问题。
Hashtable的方法是同步的,而HashMap的方法不是。
这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,
但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,
它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。
这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。
第三点不同是,是否可以使用null作为键或者值:
只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,
但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,
那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。
一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,
HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。
第一个不同主要是历史原因。
Hashtable是基于陈旧的Dictionary类的,
HashMap是Java 1.2引进的Map接口的一个实现。
第二个不同,也许最重要的不同是同步的问题。
Hashtable的方法是同步的,而HashMap的方法不是。
这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,
但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,
它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。
这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。
第三点不同是,是否可以使用null作为键或者值:
只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,
但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,
那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。
一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,
HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。
相关文章推荐
- 集合list、arrylist、linkedlist、hashMap、hashTable的区别
- 集合:HashMap与HashTable、TreeMap,ArrayList和Vector的区别
- Java基础知识强化之集合框架笔记66:Map集合面试题之HashMap和Hashtable区别(重要)
- HashSet HashTable HashMap的区别 及其Java集合介绍
- Java 集合系列 11 hashmap 和 hashtable 的区别
- 集合框架_HashMap和Hashtable的区别
- 【Map集合总结】HashMap---Hashtable---TreeMap三者的区别和相关的应用!!
- HashSet HashTable HashMap的区别 及其Java集合介绍
- 集合与数组的比较、Collection与Collections的区别、ArrayList与LinkedList区别、Vector与ArrayList区别、HashMap与Hashtable
- 集合框架——HashTable和HashMap实现原理和区别
- java集合:HashMap和Hashtable的区别
- Java集合详解三:HashMap、LinkedHashMap、TreeMap、Hashtable的区别与使用
- java集合: List、Set、Map总结 + HashMap/Hashtable 区别
- Java集合——HashMap与Hashtable的区别
- Java集合——HashMap,HashTable,ConcurrentHashMap区别
- Java基础之集合类如ArrayList、LinkedList、HashMap、HashTable的区别
- 集合框架-HashMap和Hashtable的区别
- HashTable、HashMap、Vector、ArrayList之间的区别
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap分别的区别
- 自己收集的,HashTable和Hashmap的区别