Hashtable is synchronized and HashMap is not. I believe that is the only difference. Use Hashtable if you need thread-safety. Otherwise, use HashMap since it should be somewhat faster since there's no synchronization.
Hashtable, Vector, and Stack are old classes that predate the 1.2 Collections framework. I guess they haven't been formally deprecated, but Sun recommends that new code use HashMap and ArrayList instead. And generally, once you create a HashMap, you should store it in a Map variable, and use Map rather than HashMap arguments to methods. This way, you could someday substitute a TreeMap or some other Map easily without changing much code.