2012-05-10 50 views
0

我們有一個家庭作業,實現一個類,該類創建一個將成爲字符串的2D維地圖的對象。 centralMap = new HashMap<String, Map<String,String>>。教授給了我們一個界面,其中包含我們應該重新定義的方法,比如put方法(public String put(final String row, final String column, final String value))get方法(public String get(final String row, final String column))和其他一些方法..以及我無法重新定義的方法是迭代器方法。 。在他給出的接口中,有一個Entry類,他說,我們只會將它用於迭代器方法!但是我不知道應該怎樣用它做什麼。這裏是類條目,而我們應該重新定義iterator方法(實現):Map.Entry重定義,用於2維地圖的迭代器

final class Entry 
{ 
    /** First Key. */ 
    private final String key1; 

    /** Second Key. */ 
    private final String key2; 

    /** Value. */ 
    private final String value; 

    /** Cponstructor for a new Tripel. 
    * @param key1 First Key. 
    * @param key2 Second Key. 
    * @param value Value. 
    */ 
    public Entry(final String key1, final String key2, final String value) 
    { 
     this.key1 = key1; 
     this.key2 = key2; 
     this.value = value; 
    } 

    public String getFirstKey() 
    { 
     return key1; 
    } 

    public String getSecondKey() 
    { 
     return key2; 
    } 

    public String getValue() 
    { 
     return value; 
    } 

    @Override public boolean equals(final Object anything) 
    { 
     if(anything == null) 
      return false; 
     if(getClass() != anything.getClass()) 
      return false; 
     final Entry that = (Entry)anything; 
     return Objects.equals(getFirstKey(), that.getFirstKey()) 
       && Objects.equals(getSecondKey(), that.getSecondKey()) 
       && Objects.equals(getValue(), that.getValue()); 
    } 

    // CHECKSTYLE- Magic Number 
    @Override public int hashCode() 
    { 
     int hash = 7; 
     hash = 17 * hash + Objects.hashCode(getFirstKey()); 
     hash = 17 * hash + Objects.hashCode(getSecondKey()); 
     hash = 17 * hash + Objects.hashCode(getValue()); 
     return hash; 
    } 
    // CHECKSTYLE+ Magic Number 

    @Override public String toString() 
    { 
     return String.format("(%s, %s, %s)", getFirstKey(), getSecondKey(), getValue()); 
    } 

} 

,我們應該重新定義iterator方法是這樣的一種: @Override Iterator<Entry> iterator();我應該如何繼續?我聽說我們應該爲迭代器實現一個新類。 告訴我你是否需要我實現的類(並且它實現了他給出的接口)來知道我如何將嵌套映射放入另一個類中。 。因爲嵌套地圖只是在put方法中創建的..在我的構造函數中只有centralMap。

非常感謝您的幫助!

+1

我給你足夠的暗示在這樣的回答:http://stackoverflow.com/questions/10484575/iterator-in-a-2dimensional-map我幾乎傾向於投票關閉重複。 – aioobe

+0

不知道如何開始..:S不知道如何使用它給他們的接口中包含的這個Entry類:S對不起!但是,謝謝,非常感謝您的幫助!並且有一個問題已經bey next().. eclipse說返回類型應該被轉換爲Entry,並且當我這樣做時,返回變量「toReturn」的錯誤應該被轉換爲Entry或者String。如果我將它轉換爲字符串,我將遇到與上面相同的問題,當我將它轉換爲Entry時,「innerIter.next();」 erro:toReturn應該是String ... – ZelelB

+0

好的,你應該告訴我,next()方法的解決方案是什麼? eclipse是說返回類型存在問題,它不能是「String」 – ZelelB

回答

0

您只需創建一個方法,即創建一個Iterator條目。由於使用的地圖,每個Entry都是獨一無二的。所以,你需要做的僅僅是這樣的:

for entryMap in map do { 
    entryMap get list of keysAndValues 
    for keyValue in keysAndValues preppend this key 
} 
+0

它只是僞代碼,所以代碼必須由您編寫。 :P –