I generally go by the properties of the data structures:
ArrayList: maintains insertion order, no keyed lookup
Hashtable: keyed lookup, no defined order
SortedList: keyed lookup, maintains sorted order
I've also listed them in order of frequency of use: I use ArrayList far
more than Hashtable (because I don't often want keyed lookup), and
SortedList even less frequently (because rarely do I need both keyed
lookup and sorted order, and can't just do Hashtable -> Array and
sort).
Generally, Hashtables and SortedLists point to specialized higher-level
data structures, so I tend to wrap classes around them that offer more
specific services.
ArrayLists get used all over the place in code, casually.