2

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

除了单独访问每个字段并比较是否相等之外,是否有任何时间有效的方法来做到这一点?

4

4 回答 4

1

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

我不确定该“压缩标签”使用哪种算法。如果您的所有 HashMap 项目都可以转换为字符串,您可以尝试 MD5 散列字符串的所有连接吗?

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

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

于 2013-03-28T04:42:57.047 回答
0

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

于 2013-03-28T04:58:10.917 回答
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;
}
于 2013-03-28T04:51:53.990 回答
0
so far my attempt has been extract my required fields and compare each of them

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

于 2013-03-28T04:48:40.343 回答