我需要根据几个键(不是全部)确定两个HashMaps的相等性
除了通过单独访问每个字段并比较相等性,是否有时间有效的方法来执行此操作?
答案 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(),如果你在主映射中进行更多的相等比较,那么这可能是值得的。否则,我不确定是否有比蛮力检查更快的解决方案。