我需要仅根据几个键(不是全部)确定两个 HashMap 的相等性
除了单独访问每个字段并比较是否相等之外,是否有任何时间有效的方法来做到这一点?
我能想到的一种方法是在 HashMap 上存储某种“压缩标签”,每次添加新项目/修改/删除现有项目时都会更新该标签。每当您需要进行比较时,您只需比较这个“压缩标签”。
我不确定该“压缩标签”使用哪种算法。如果您的所有 HashMap 项目都可以转换为字符串,您可以尝试 MD5 散列字符串的所有连接吗?
当然,这样做的缺点是每次修改 HashMap 元素时都必须计算“压缩标签”的负担。
这个想法类似于您如何使用 .md5 文件来验证下载的文件是否一致(不会因网络传输而损坏)。我不确定它是否适用于您的情况/不
您是否有任何方法可以预测您需要比较相等性的键集将如何组成?如果是这样,您可以构建与这些键组中的每一个相对应的子图,然后在这些子图上使用简单的 .equals() ,如果您进行的相等比较比放入主图更多,这可能是值得的。否则,我不确定是否有比蛮力检查更快的解决方案。
如果你有一个键列表,这应该足够有效。因为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;
}
so far my attempt has been extract my required fields and compare each of them
据我所知,这是最好的方法