enter initial number of items enter first letter of showinsertdeleteor finds list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last) list (first-->last)if you insert more items into this tableyou'll see the lists grow longerbut maintain their sorted order you can delete items as well we'll return to the question of when to use separate chaining when we discuss hash table efficiency later in this hash functions in this section we'll explore the issue of what makes good hash functionand see if we can improve the approach to hashing strings mentioned at the beginning of this quick computation good hash function is simpleso it can be computed quickly the major advantage of hash tables is their speed if the hash function is slowthis speed will be degraded hash function with many multiplications and divisions is not good idea (the bitmanipulation facilities of java or ++such as shifting bits right to divide number by multiple of can sometimes be used to good advantage the purpose of hash function is to take range of key values and transform them into index values in such way that the key values are distributed randomly across all the indices of the hash table keys may be completely random or not so random random keys so-called perfect hash function maps every key into different table location this is only possible for keys that are unusually well behavedand whose range is small enough to be used directly as array indices (as in the employee-number example at the beginning of this