definition vs. implementation
A hash table is one (moderately efficient) method of implementing associative arrays.
An NSDictionary is specified to behave like an associative array, but the implementation is opaque. The hidden underlying implementation could, for instance, change depending on the size of the array, phase of the moon, & etc.