仅基于某些键等同两个HashMap

时间:2013-03-28 04:29:23

标签: java hashmap equals field selected

我需要根据几个键(不是全部)确定两个HashMaps的相等性

除了通过单独访问每个字段并比较相等性,是否有时间有效的方法来执行此操作?

4 个答案:

答案 0 :(得分:1)

我能想到的一种方法是在HashMap上存储某种“压缩标签”,每次添加新项目/修改/删除现有项目时都会更新。每当您需要进行比较时,您只需比较这个'压缩标签'。

我不确定这种“压缩标签”使用什么样的算法。如果你的所有HashMap项都可以转换为字符串,你可以尝试MD5哈希字符串的所有串联吗?

当然,这样做的缺点是每次修改HashMap元素时都必须计算“压缩标签”的负担。

这个想法类似于如何使用.md5文件来验证下载的文件是否一致(没有因网络传输而损坏)。我不确定它是否适用于你的情况/不是

答案 1 :(得分:0)

so far my attempt has been extract my required fields and compare each of them

据我所知,这是最好的方式

答案 2 :(得分:0)

如果你有一个密钥列表,这应该足够有效。因为hashmap.get()已在内部优化

public boolean isNotEqual(){
boolean unequal = false;
for(int i=0;i<list.size();i++){
if(ob1.containsKey(list.elementAt(i)) && ob2.containsKey(list.elementAt(i))){
    if(!ob1.equals(ob2)) {
        unequal = true;
        break;
}else{
    unequal = true;
    break;
}
return unequal;
}

答案 3 :(得分:0)

您是否有任何方法可以预测如何组成您需要比较相等的键组?如果是这样,你可以构造对应于每组键的子图,然后在这些子图上使用简单的.equals(),如果你在主映射中进行更多的相等比较,那么这可能是值得的。否则,我不确定是否有比蛮力检查更快的解决方案。