按照有效的Java,項22,爲什麼函數getKey,getValue和setValue與Map沒有關聯?
許多Map實現具有用於在圖中的每個鍵 - 值對的內部Entry對象。 雖然每個項目都與地圖相關聯,一個條目 (信息getKey,的getValue和setValue方法)的方法並不需要訪問地圖。
你能解釋一下這是什麼意思?你能舉一個典型的Map實現的例子來展示這些函數如何不依賴於Map內部?
按照有效的Java,項22,爲什麼函數getKey,getValue和setValue與Map沒有關聯?
許多Map實現具有用於在圖中的每個鍵 - 值對的內部Entry對象。 雖然每個項目都與地圖相關聯,一個條目 (信息getKey,的getValue和setValue方法)的方法並不需要訪問地圖。
你能解釋一下這是什麼意思?你能舉一個典型的Map實現的例子來展示這些函數如何不依賴於Map內部?
這是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;
...
地圖由許多Entry
對象。您可以將Entry視爲鍵值對。
這是地圖包含的條目和條目沒有到地圖的任何訪問。
輸入訪問其自己的領域而不是在HashMap中,即進入其他項可以提供getter和setter其自身包含字段,不必HashMap的任何訪問。
你能解釋也進入和地圖之間的關係? –
在我的答案中查看更新 –