繁体   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