hastTable和hashMap的区别:
(1)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
(2)这个不一样便是最重要的一点:Hashtable中的方法是同步的,而HashMap方法(在缺省状况下)是非同步的。便是说,在多线程应用程序中,不用专门的操做就安全地能够使用Hashtable了;而对于HashMap,则须要额外的同步机制。但HashMap的同步问题可经过Collections的一个静态方法获得解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的全部方法,使得底层的HashMap即便是在多线程的环境中也是安全的。
(3)只有HashMap可让你将空值做为一个表的条目的key或value。HashMap中只有一条记录能够是一个空的key,但任意数量的条目能够是空的value。这就是说,若是在表中没有发现搜索键,或者若是发现了搜索键,但它是一个空的值,那么get()将返回null。若是有必要,用containKey()方法来区别这两种状况。
其它的一些资料:
1.HashTable的方法是同步的,HashMap未经同步,因此在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList同样。(最主要的区别)
2.HashTable不容许null值(key和value都不能够),HashMap容许null值(key和value均可以,只允许有一个null值的key,能够有多个

null值的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的操做。