簡體   English   中英

如何比較具有不同鍵的HashMap?

[英]how can I compare HashMaps with different keys?

我有一個將簇存儲在HashMap<String, ArrayList<String>>的聚類算法。

我需要將其與存儲在另一個HashMap<String, ArrayList<String>>的基本事實進行比較。

密鑰不同,因為數組是通過增量集群創建的,所以我想知道如何將原始集群與生成的集群進行比較。

我使用NMI和BCUBED作為聚類評估指標,但是我的問題是,如果它們具有不同的鍵,則如何引用相同的聚類(ArrayList)。

有任何想法嗎?

對於您的類的設置方式以及HashMap<String, ArrayList<String>>的真正含義,我還不是100%清楚,但是我的傾向是您應該擁有一個鍵哈希。 因此,在分配群集時,您可以執行以下操作。

原始數據:

Hashmap<String, ArrayList<String>> = key: Array Of Original Data

您將根據以下功能存儲每個群集中的內容:

HashMap<String, ArrayList<String>> = Cluster Key: Array of Original Data Keys

這將為您提供一種機制,以循環瀏覽每個群集中的對象並仍保持原始對象的狀態,這有意義嗎? 您最終將能夠寫出類似於以下內容的內容:

for(String clusterKey : clusterMap.keySet()){
    for(String itemKey : clusterMap.get(clusterKey)){
       calculateDistance(centroid, originalMap.get(itemKey);
    }
}

這是一個過分的簡化,但是應該使您朝正確的方向前進。

編輯我還假設有一個質心到簇本身的HashMap。 因此, calculateDistance()方法可以改寫為calculateDistance(centroidMap.get(clusterKey), originalMap.get(itemKey));

我猜您可以創建一個反向HashMap,其中KeyObj是帶有ArrayList和計數器的新對象。

在反向HashMap中,鍵的計數器將是相等的ArrayLists的數量。

現在,比較算法很容易:遍歷第一個HashMap的值,並搜索該值作為新HashMap的鍵。 如果找到密鑰並且計數器為0,或者找不到密鑰,則返回false。 否則,請進行計數-並繼續進行下一個迭代。 最后,返回true。

暫無
暫無

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

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