为什么在HashTable ADT的这个实现中有一个嵌套类(来自教科书的代码)?

时间:2015-11-25 17:57:36

标签: java hashtable

我正在阅读我的教科书,偶然发现了这段代码:

 public abstract class AbstractMap<K,V> implements Map<K,V> {
    public boolean isEmpty() { return size() == 0; } 
          //---------------- nested MapEntry class ---------------
              protected static class MapEntry<K,V> implements Entry<K,V> { 
                 private K k; // key 
                  private V v; // value 
                 public MapEntry(K key, V value) { 
                    k = key; 
                    v = value; 
                  } 
                 // public methods of the Entry interface 
                  public K getKey() { return k; } 
                  public V getValue() { return v; } 
                // utilities not exposed as part of the Entry interface                    
                    protected void setKey(K key) { k = key; }  
                    protected V setValue(V value) { 
                     V old = v; 
                     v = value; 
                     return old; 
                    } 
               } 
         //----------- end of nested MapEntry class ----------

我一直试图解决这个问题。我似乎无法理解为什么嵌套类如此重要。是不是可以省略那个嵌套类,只是将所有这些方法放在AbstractMap类中?它是出于安全目的(如链接列表和节点?)

请随时告诉我这个问题是不是正确的地方,因为代码不是我的代码,而是我的教科书中的代码。

1 个答案:

答案 0 :(得分:2)

实施Map时需要实施的方法之一是

public Set<Map.Entry<K,V>> entrySet();

由于返回类型为Set<Map.Entry<K,V>>,因此您需要为Entry<K,V>提供Map的实施。通常的做法是将Entry实现为Map的内部类,它是Entry

鉴于Entry可以独立使用Map作为其基础,您需要在Entry类上使用这些方法。