Hashtable is synchronized on the table, HashMap isn't; you would have to add it yourself using a wrapper class. (or you could probably use the java.util.concurrent.ConcurrentHashMap to get a similar effect). Also, the iterator of the HashMap used in for loops is fail-safe, while the enumerator for the Hastable is not. if you change hashMap while iterating, you'll know; that is, that item will be iterated. if you iterate on a hashTable and add values while iterating, you won't see the new values unless you restart the iterator. Lastly, HashMap permits null values, while Hashtable doesn't.
The actual objects being represented are exactly the same, they just have different names. Hashtable is one of the first classes added to java's collections. Also, it was added before the introduction of generics and as such HashMap should be heavily favoured. (Hashtable extends from Dictionary, which itself is deprecated, also).
The "distinction" is hard to find, because there quite literally is no distinction, at least data-structure wise. They represent the exact same data structure; hashMap just takes advantage of new language features, such as generics, to support strong typing of it's key's and values, whereas hashtable does not; it (hashMap) also better supports the use of strongly-typed iterators by virtue of generics iterators (such as those used with a foreach loop of the style for(value:collection){statements...}).