2013-01-09 234 views
0
爲TreeMap的返回錯誤

我有一個TreeMap的定義如下:迭代器中的Java

final TreeMap<ArrayList<String>,String> mymap = new TreeMap<ArrayList<String>,String>(comparator); 

當我嘗試遍歷這樣的:

Iterator iter = (Iterator) mymap.entrySet().iterator(); 
    while (iter.hasNext()) { 
     Map.Entry entry = (Map.Entry) iter.next(); 
    } 

我收到錯誤消息像的方法hasNext()對於第二行的類型ObjToIntMap.Iterator未定義,該行的多個標記 - Map.Entry是原始類型。泛型類型Map.Entry的引用應爲 參數化第3行的

這個錯誤的來源是什麼,我該如何解決?

+0

你不覺得TreeMap的<字符串,ArrayList的>會更好?字符串是一個鍵 – Deepak

+1

1.我不能用你已發佈的代碼重現錯誤2.在各處使用泛型是一個好習慣:'Iterator ,String >> iter = mymap.entrySet( ).iterator();'3.做2可能會幫助你理解錯誤是什麼。 – assylias

+0

@Deepak,是啊我知道它看起來很奇怪,但我需要做到這一點有一個自定義比較函數.. – SexyBeast

回答

4

也許你輸入了錯誤的Iterator類?您確定您已經導入了java.util.Iterator,並且沒有其他名稱爲Iterator的其他程序包中的其他課程嗎?

如果導入的正確Iterator類,你可以刪除類型轉換,並添加泛型類型的迭代器:

Iterator<Map.Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator() 
+0

是啊,不知道從另一個'iterator'類導入!萬分感謝! – SexyBeast

+0

另一個問題,當我想通過'entry.getKey()。get(0)'訪問關鍵數組列表中的第一個元素時,我得到錯誤消息**方法get(int)未定義爲類型Object **。我如何解決它? – SexyBeast

+0

解決了它,解決了它。現在好了... – SexyBeast

1

嘗試

Iterator<Entry<ArrayList<String>, String>> iter = mymap.entrySet().iterator(); 
    while(iter.hasNext()) { 
     Entry<ArrayList<String>, String> entry = iter.next(); 
    } 
1

您可以使用for-each循環遍歷通過地圖:

for(Map.Entry<List<String>,String> entry : mymap.entrySet()) { 
    List<String> key = entry.getKey(); 
    String value = entry.getValue(); 

    // Do something useful with the key and value 
} 

或者你可以只是循環的鍵我們mymap.keySet()或值mymap.calues()

2

你知道,你不能改變的關鍵,一旦加入,它的具體類型並不重要(或理想地使用)

final Map<List<String>,String> mymap = new TreeMap<>(comparator); 
for (Map.Entry<List<String>, String> entry : mymap.entrySet()) { 

}