2012-12-31 27 views
2

按照有效的Java,項22,爲什麼函數getKey,getValue和setValue與Map沒有關聯?

許多Map實現具有用於在圖中的每個鍵 - 值對的內部Entry對象。 雖然每個項目都與地圖相關聯,一個條目 (信息getKey,的getValue和setValue方法)的方法並不需要訪問地圖。

你能解釋一下這是什麼意思?你能舉一個典型的Map實現的例子來展示這些函數如何不依賴於Map內部?

回答

2

這是java.util.HashMap.Entry實現

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

     ... 

     public final K getKey() { 
      return key; 
     } 

     public final V getValue() { 
      return value; 
     } 

     public final V setValue(V newValue) { 
      V oldValue = value; 
      value = newValue; 
      return oldValue; 
     } 
     ... 

,你可以看到信息getKey,的getValue和setValue方法只工作有進入的領域,並不需要訪問HashMap類本身。

但當然HashMap中需要訪問它的條目,所以它擁有他們在一個領域作爲數組

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { 
    ... 
    Entry[] table; 
    ... 
+0

你能解釋也進入和地圖之間的關係? –

+0

在我的答案中查看更新 –

0

地圖由許多Entry對象。您可以將Entry視爲鍵值對。

這是地圖包含的條目和條目沒有到地圖的任何訪問。

輸入訪問其自己的領域而不是在HashMap中,即進入其他項可以提供getter和setter其自身包含字段,不必HashMap的任何訪問。

相關問題