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