簡體   English   中英

檢索哈希圖的鍵

[英]Retrieving keys of a hashmap

除了使用鍵集以外,還有什么方法可以檢索哈希圖的鍵? 我編寫了以下代碼,我有一個名為map的哈希表,它包含整數鍵和雙精度值:

    Set<Integer> keys = sorted_map.keySet();
    Object[] weel = new Object[keys.size()];
    Iterator it = keys.iterator();
    int l = 0;
    while(it.hasNext())
    {
        weel[l] = it.next();
    }

現在,我有了一個包含地圖鍵的數組。 但是現在我需要將這些鍵與某個整數進行比較。 例如 :

              if(weel[1] == 5) 

但是由於weel類型是Object,因此我無法執行上述操作,也無法將其強制轉換為int。 我怎樣才能做到這一點? 可能嗎?

不確定為什么要創建密鑰副本,您可以只使用密鑰。

你可以做

List<Integer> keys = new ArrayList<Integer>(sorted_map.keySet());
if (kyes.get(1) == 5)

要么

Integer[] keys = (Integer[]) sorted_map.keySet()
                 .toArray(new Integer[sorted_map.size()]);
if (kyes[1] == 5)

要么

Iterator<Integer> iter = sorted_map.keySet().iterator();
iter.next(); // skip the first.
if(iter.next() == 5);

為什么不將數組聲明為Integer[]int[] 在后一種情況下,您甚至可以使用==進行比較。 但是,在這種情況下,您也會隱式使用拆箱,如果地圖很大,這可能會影響性能。

您的鍵集類型為Integer(不是int),因為已正確用Set表示。 因此,您要從數組中刪除的是類型為Integer的對象,該類型不能轉換為int類型。 您應該做的是創建一個類型為Integer而不是Object的數組,然后進行比較時,可以使用Integer的intValue()方法將其作為int值獲取。

首先,您不需要使用迭代器來填充數組,您可以像這樣在鍵集上調用.toArray()方法:

sortedMap.keySet().toArray();

然后,您所要做的就是將對象數組的每個元素轉換為使用時的整數(或者您可以在創建數組時將其轉換為整數數組)

if (((Integer)weel[1]0 == 5){
}

另外,您可能要注意,您的if語句僅包含一個=多數民眾贊成在和分配而不是一個比較。

編輯:

在反射時,您還可以使用toArray方法,該方法實際上返回一個類型化數組:

Set<Integer> keySet = new sortedMap.keySet();       
Integer[] weel = {};
weel = keySet.toArray(weel);

您將擁有一個整數數組,可以將其與任何其他整數進行比較。

暫無
暫無

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

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