簡體   English   中英

如何檢索ArrayList的鍵 <String> 來自Hashtable?

[英]How do I retrieve a key of ArrayList<String> from a Hashtable?

我基本上有一個包含ArrayList<String>,Boolean的HashTable。 我需要從Hashtable中檢索密鑰。 然后我需要從ArrayList<String>獲取第一個值,這是鍵。

我試過了 :

    Hashtable<ArrayList<String>,Boolean> tableRows = tableRead(); // returns the Hashtable.

    ArrayList<String> IDs = new ArrayList<String>();        

    Iterator it = tableRows.keySet().iterator();
    while (it.hasNext()) {
        IDs.add(it.next().get(0));      
    }

但是,這給了我一個錯誤: cannot find symbol

[javac]   symbol:   method get(int)
[javac]   location: class Object

只是為了給出一個功能性的想法:我基本上將整個數據庫行作為Hashtable中的一個鍵。 我只需要取回身份證。

有人可以幫我解決這個問題嗎?

您已聲明了原始Iterator ,因此其next()方法將返回一個沒有get方法的Object 它是您的密鑰,但它被鍵入為Object因為您的Iterator是原始的(沒有泛型類型參數)。

使用從該組鍵返回的通用Iterator

Iterator<ArrayList<String>> it = tableRows.keySet().iterator();

然后it.next()將返回一個ArrayList<String> ,您可以在其上調用get

您必須在Iterator使用原始類型

Iterator<ArrayList<String>> it = tableRows.keySet().iterator();

對於推薦,永遠不要使用可變對象作為鍵,因為你會有意想不到的行為。

如果對象的hashCode()值可以根據其狀態進行更改,那么在使用這些對象作為基於散列的集合中的鍵時必須小心,以確保在將它們用作散列鍵時不允許它們的狀態發生更改。 所有基於散列的集合都假定對象的散列值在用作集合中的鍵時不會更改。 如果密鑰的哈希代碼在集合中發生變化,則可能會出現一些不可預測且令人困惑的后果。 這在實踐中通常不是問題 - 通常的做法是使用像List這樣的可變對象作為HashTable中的鍵

如果你仍然希望以這種方式使String集合不可修改。

List<String> unmodifiableList = Collections.unmodifiableList(myKeyList);

並使用unmodifiableList作為密鑰。

使用ArrayList<String>作為Map的關鍵是一個非常非常糟糕的主意。 你絕不能使用可變對象作為密鑰,如果列表發生任何變化,密鑰將無效 - 這是一種設計氣味(和臭味)。

作為替代方案,我建議你使用ArrayList中的字符串串聯構建一個不可變的鍵,或者使用一個用Collections.unmodifiableList()創建的不可變列表,甚至更好,只使用id列,它不會任何使用整行作為關鍵的意義。

無論如何,如果你必須使用ArrayList作為鍵,下面的代碼將解決問題 - 並且不需要顯式使用迭代器,在這種情況下,增強的for循環是迭代鍵的更好的替代方法:

for (ArrayList<String> al : tableRows.keySet()) {
    IDs.add(al.get(0));
}

嘗試這個

    ArrayList<String> list = new ArrayList<>();
    Hashtable<ArrayList<String>,Boolean> tableRows = new Hashtable<>();
    Set<ArrayList<String>> keys  = tableRows.keySet();
    Iterator<ArrayList<String>> itr = keys.iterator();
    while(itr.hasNext()){
        itr.next().get(0);
    }

希望這會幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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