2014-12-04 1 views
3

HashMap внутренне использует Node<K, V>array против Hashtable внутренне использует Map.Entry<K, V>array, почему эта внутренняя разница:HashMap внутренне использует узел <K, V> массив против Hashtable внутренне использует Map.Entry <K, V> массив, почему это внутреннее различие?

HashMap использует Node внутренний класс реализации Map.Entry.

static class Node<K,V> implements Map.Entry<K,V> { 
    final int hash; 
    final K key; 
    V value; 
    Node<K,V> next; 

    Node(int hash, K key, V value, Node<K,V> next) { 
     this.hash = hash; 
     this.key = key; 
     this.value = value; 
     this.next = next; 
    } 

Hashtable использует Map.Entry.

private static class Entry<K,V> implements Map.Entry<K,V> { 
    final int hash; 
    final K key; 
    V value; 
    Entry<K,V> next; 

    protected Entry(int hash, K key, V value, Entry<K,V> next) { 
     this.hash = hash; 
     this.key = key; 
     this.value = value; 
     this.next = next; 
    } 

швы одинаковые, но они разные.
Есть ли какие-либо конкретные причины для использования HashMap использует Node<K,V>array вместо Map.Entry<K,V>array?

+2

Насколько я вижу, разница между этими классами заключается только в том, что у них разные имена. Обратите внимание, что 'Entry ' не совпадает с 'Map.Entry '. – axtavt

+0

Последнее предложение в этом вопросе, похоже, спрашивает, есть ли причина использовать HashMap вместо Hashtable. Ответ: Всегда используйте HashMap, если вы не работаете с API, для которого требуется экземпляр Hashtable, потому что Hashtable является задержкой с Java 1.0, которая имеет в основном бесполезную синхронизацию по каждому методу. – VGR

ответ

0

Оба используют интерфейс Map.Entry. HashTable, который предшествует HashMap, обеспечивает реализацию частного класса, доступ к которой возможен только в классе HashTable. Следовательно, было бы невозможно использовать его в HashMap.

Смежные вопросы