HashMaps and HashTables are both classes in Java which use the hash table data structure to store data as key-value pairs. Although they are quite similar, there are some differences between them.
When an error occurs, if a system exists and does not proceed further, then it is considered to be fail-fast. Otherwise, it is called fail-safe. Since a HashMap’s Iterator is fail-fast, our program will terminate if an exception is thrown. (Note: A fail-fast Iterator throws an exception if we try to modify our data while traversal).
Enumeration and Iterator are pretty much the same; both are used for traversal. An Iterator can also delete an element using remove()
, whereas an Enumeration cannot manipulate the class it traverses. Also, Enumeration is a legacy interface (can only traverse legacy classes like Vector, etc.).
Thread safety means that our data remains consistent when viewed or edited by two or more threads. When one thread accesses it for editing, it will be inaccessible by others. This can be done by passing your HashMap to a built-in function in the Java Collections Framework which returns a synchronised (thread-safe) map:
HashMap<int, int> syncMap = Collections.synchronizedMap(myMap);
The following example demonstrates the difference of storing null keys and values in a HashMap and a HashTable. (An exception will be thrown if you try to insert null as a key or value; try uncommenting line 22 and 23)
import java.util.*;public class Test {public static void main(String[] argv){Map<Integer, String> map = new HashMap<>();map.put(null, "value with null key");map.put(1, "123");map.put(2, "abc");map.put(3, null);System.out.println("HashMap's output:");System.out.println(map.get(null));System.out.println(map.get(1));System.out.println(map.get(2));System.out.println(map.get(3));Hashtable<Integer, String> table = new Hashtable<>();// Try uncommenting the following lines.// table.put(null, "xyz");// table.put(3, null);table.put(1, "cat");table.put(2, "dog");System.out.println("\nHashTable's output:");System.out.println(table.get(1));System.out.println(table.get(2));}}
Free Resources