簡體   English   中英

Java-通過HashMap進行的迭代替換了ArrayList

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM