HashMap與HashTable的主要區別是什么?為什么都推薦使用HashMap?那么HashTable還有用武之地嗎?什么時候才使用HashTable呢?
ArrayList與Vector的區別是否也一樣呢?

答:
1.以下內容來自:(《corejava 卷2》第119頁)
Hashtable類的作用與HashMap類是相同的,實際上它們擁有相同的接口。與Vector類的方法一樣,Hashtable類的各個方法也是同步的。如果你不需要同步也不需要與遺留代碼相兼容,你就應該使用HashMap類。

注意:Hashtable的類名字,table的"t"是小寫,在windows系統,如果你使用HashTable,會報出一些奇怪的出錯信息,因為windows文件系統不區分大小寫,而java編譯器則是區分大小寫的。

自己注釋:
自己也查了jdk5的api證實了一下,HashMap與HashTable都實現了相同的接口,這兩個類擁有一模一樣的方法,不過它們不是繼承自同一個類。
HashMap:
java.lang.Object
? java.util.AbstractMap<K,V>
????? java.util.HashMap<K,V>
All Implemented Interfaces:
Serializable, Cloneable, Map<K,V>

Hashtable:
java.lang.Object
? java.util.Dictionary<K,V>
????? java.util.Hashtable<K,V>
All Implemented Interfaces:
Serializable, Cloneable, Map<K,V>

2.以下內容來自:(《corejava》卷2第88頁)
現在為什么要用ArrayList類來代替Vector了呢?原因很簡單:Vector類的所有方法都是同步的。你可以用兩個線程安全的訪問Vector對象。但是,如果你只用單個線程來訪問Vector對象——這是更加常見的情況——那么你的代碼將會在同步操作上浪費相當多的時間。相反,ArrayList類的方法不是同步的。因此我們建議你在不需要同步時使用ArrayList而不是Vector。

自己注釋:ArrayList與Vector也都是實現相同的接口,并且繼承自相同的AbstractList類;它們的方法幾乎也一模一樣。
ArrayList類:
java.lang.Object
? java.util.AbstractCollection<E>
????? java.util.AbstractList<E>
????????? java.util.ArrayList<E>
All Implemented Interfaces:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess

Vector類:
java.lang.Object
? java.util.AbstractCollection<E>
????? java.util.AbstractList<E>
????????? java.util.Vector<E>
All Implemented Interfaces:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess