2012-02-15 84 views
2

以前我設置了一個ArrayList來包含記錄的對象。我已經用存儲對象的HashMap替換了ArrayList,並使用個人的用戶名字符串作爲鍵。Java - 用HashMap替代ArrayList的迭代

該目錄的類實現了通過implements Iterable<Object>(僅僅是一個問題,但爲什麼<Object>需要?)。

用於迭代ArrayList上面的代碼是:

public Iterator iterator() { 
     return records.iterator(); 
    } 

然後我用這個迭代器中的所有該類對象如下:

for (Object o : directory) { 
      TelephoneRecords temp = (TelephoneRecords) o; 
      System.out.println(temp.toString()); 
    } 

不幸的是,HashMapName.iterable( );似乎會引發問題,那麼我該如何使用HashMap來處理這種行爲?

回答

0

我解決我的問題與records.values().iterator();更換records.iterator();(沒有工作)。看起來你不能直接在HashMap上迭代,但你可以遍歷它中的值(對象)。

此外,獲取和打印HashMap的內容的問題,我通過以下代碼解決。它遍歷目錄內的TelephoneRecords對象,如TelephoneRecords o : directory和目錄類中的Iterator方法所指定的那樣。然後,將一個臨時對象分配給正在迭代的TelephoneRecords對象,並使用[custom] toString()方法打印出特定的TelephoneRecords對象的字符串。

for (TelephoneRecords o : directory) { 
    TelephoneRecords temp = (TelephoneRecords) o; 
    System.out.println(temp.toString()); 
} 

而且我最終按照所提供的幫助,解決我的小方的問題,使用Iterator<TelephoneRecords>(而不是簡單地使用對象)來遍歷包含在目錄對象中的TelephoneRecords對象。

0

什麼是「似乎提出的問題」是什麼意思?在HashMap中,您可以迭代鍵(map.keySet()),值(map.values())或鍵值對(map.entrySet())。

0

您可以使用哈希映射中的入口集,然後按照與之前一樣的方式迭代該入口集。如果你只在按鍵興趣

Map<String, TelephoneRecords> 
5

,您可以通過迭代 -

for (Object o : Directory.getEntrySet()) { 

}

此外,如果您鍵入的HashMap它會刪除需要投地圖上的鍵設置():

Map<String, Object> map = ...; 

for (String key : map.keySet()) { 
    // ... 
} 

如果你只需要值,使用價值():

for (Object value : map.values()) { 
    // ... 
} 

最後,如果你想同時得到鍵和值,使用的entrySet():

for (Map.Entry<String, Object> entry : map.entrySet()) { 
    String key = entry.getKey(); 
    Object value = entry.getValue(); 
    // ... 
} 

希望這有助於你。

1

您可以迭代HashMap的entrySet。 entrySet包含鍵和值的集合。然後可以通過getKey()和getValue()訪問鍵和值。這可以通過下面的代碼來完成:

for (Map.Entry<String, Object> entry : map.entrySet()) { 
    String username = entry.getKey(); 
    TelephoneRecord record = (TelephoneRecord)entry.getValue(); 
    // Do something with username and record ... 
} 

你離問題:

對象是HashMap的,它說了Iterable包含對象的類型參數。如果你的HashMap中只應該包含TelephoneRecords對象,更換

implements Iterable<Object> 

implements Iterable<TelephoneRecords> 

你說,你可迭代包含TelephoneRecords,這反過來又可以讓你避免鑄造並獲得編譯錯誤這樣而不是運行時錯誤,如果你做錯了什麼(這是最好的!)。這將提高上述代碼:

for (Map.Entry<String, TelephoneRecord> entry : map.entrySet()) { 
    String username = entry.getKey(); 
    TelephoneRecord record = entry.getValue(); 
    // Do something with username and record ... 
} 
+0

那麼,爲什麼我的records.iterator(); ? – mino 2012-02-15 20:37:55

+0

你不能直接遍歷HashMap,你必須使用entrySet。因此,如果你想創建一個迭代器,請嘗試:Iterator > mapEntries = records.entrySet()。iterator(); – 2012-02-15 20:45:52