[英]Java - Iteration over HashMap replacing ArrayList
以前,我設置了一個ArrayList來包含記錄對象。 從那以后,我用存儲對象的HashMap替換了ArrayList,並使用個人的用戶名字符串作為鍵。
通過implements Iterable<Object>
來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來解決此問題?
如果您僅對鍵感興趣,則可以遍歷地圖的keySet():
Map<String, Object> map = ...;
for (String key : map.keySet()) {
// ...
}
如果只需要這些值,請使用values():
for (Object value : map.values()) {
// ...
}
最后,如果需要鍵和值,請使用entrySet():
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// ...
}
希望這對您有所幫助。
您可以遍歷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 ...
}
您的疑問:
Object是HashMap的類型參數,它表示Iterable包含Objects。 如果您的HashMap僅應包含TelephoneRecords對象,請替換
implements Iterable<Object>
同
implements Iterable<TelephoneRecords>
這樣,您說的是Iterable包含TelephoneRecords,如果您做錯了事,那么它就可以避免轉換並獲得編譯錯誤,而不是運行時錯誤(這是首選!)。 這樣可以將上面的代碼改進為:
for (Map.Entry<String, TelephoneRecord> entry : map.entrySet()) {
String username = entry.getKey();
TelephoneRecord record = entry.getValue();
// Do something with username and record ...
}
“似乎提出了問題”是什么意思? 在HashMap中,可以迭代鍵( map.keySet()
),值( map.values()
)或鍵值對( map.entrySet()
)。
您可以使用哈希圖中的入口集,然后以與您已經執行的相同方式對其進行迭代,例如
for (Object o : Directory.getEntrySet()) {
}
另外,如果您輸入哈希圖,則將無需進行強制轉換-
Map<String, TelephoneRecords>
我通過替換records.iterator();
解決了我的問題records.iterator();
(無效)與records.values().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>
(而不是簡單地使用Object)遍歷目錄對象中包含的TelephoneRecords對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.