Analyse des Unterschieds zwischen Hashtable und HashMap in Java.
1. Hashtable ist eine Unterklasse von Dictionary folgt:
Der Code lautet wie folgt:
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable HashMap:
HashMap und Hashtable sind beide Implementierungsklassen der Map-Schnittstelle
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
Der Code lautet wie folgt:
Diese Methode gibt eine synchronisierte Map zurück, d. h Sagen wir, die zurückgegebene Map ist threadsicher. Es ist zu beachten, dass Sie beim Iterieren der zurückgegebenen Karte die zurückgegebene Karte manuell synchronisieren müssen, da dies sonst zu unsicherem Verhalten führt:
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
Der Code lautet wie folgt:
3. In HashMap kann null als Schlüssel verwendet werden, und es kann nur einen solchen Schlüssel geben, dessen entsprechender Wert null ist. Wenn die Methode get() einen Nullwert zurückgibt, kann dies bedeuten, dass der Schlüssel nicht in der HashMap vorhanden ist, oder es kann auch bedeuten, dass der dem Schlüssel entsprechende Wert null ist. Daher kann in HashMap die Methode get () nicht verwendet werden, um zu bestimmen, ob ein bestimmter Schlüssel in HashMap vorhanden ist. Zur Bestimmung sollte jedoch die Methode containsKey () verwendet werden. Der Schlüsselwert von Hashtable darf nicht null sein, andernfalls: java.lang.NullPointerException.
4.HashTable verwendet Enumeration und HashMap verwendet Iterator.Map m = Collections.synchronizedMap(new HashMap()); ... Set s = m.keySet(); // Needn't be in synchronized block ... synchronized(m) { // Synchronizing on m, not s! Iterator i = s.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }
5. Die Standardgröße des Hash-Arrays in HashTable beträgt 11 und die Erhöhungsmethode ist alt*2+1. Die Standardgröße des Hash-Arrays in HashMap beträgt 16 und muss ein Exponent von 2 sein.
6. Die Verwendung von Hash-Werten ist unterschiedlich. Der Code lautet wie folgt:
Und HashMap berechnet den Hash-Wert neu und verwendet AND anstelle von Modulo, beispielsweise die Put-Methode von HashMap:
int hash = key.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length;
Der Code lautet wie folgt:
public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }
Das obige ist der detaillierte Inhalt vonAnalyse des Unterschieds zwischen Hashtable und HashMap in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!