Java 仅基于某些键将两个HashMap相等

Java 仅基于某些键将两个HashMap相等,java,hashmap,equals,field,selected,Java,Hashmap,Equals,Field,Selected,我只需要基于几个键(不是全部键)来确定两个哈希映射的相等性 除了单独访问每个字段并进行相等性比较外,还有什么省时的方法吗?我能想到的一种方法是在HashMap上存储某种“压缩标签”,每当添加新项/修改/删除现有项时,该标签都会更新。无论何时需要进行比较,只需比较这个“压缩标签” 我不确定这种“压缩标签”使用哪种算法。如果您的所有HashMap项都可以转换为字符串,那么您可以尝试MD5哈希所有字符串的串联,也许 当然,这样做的缺点是,每次修改HashMap元素时,都必须计算“压缩标签”的大小 其思

我只需要基于几个键(不是全部键)来确定两个哈希映射的相等性


除了单独访问每个字段并进行相等性比较外,还有什么省时的方法吗?

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

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

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

其思想类似于使用.md5文件验证下载的文件是否一致(没有因网络传输而损坏)。不过我不确定它对你的情况是否有效

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

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

如果您有一个密钥列表,这应该足够有效。as
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;
}
public boolean isNotEqual(){
布尔不相等=假;

对于(int i=0;i您是否有任何方法可以预测需要比较相等性的键集将如何组成?如果有,您可以构造对应于这些键集的子映射,然后使用simple.equals()在这些子地图上,如果你做的平等性比较比主地图上的要多得多,这可能是值得的。否则,我不确定是否有比暴力检查更快的解决方案。

到目前为止,我的尝试是提取我所需的字段并比较每个字段,因为我需要比较非常大的数字,我想知道是否没有这里有任何有效的机制来实现这一点,你想如何选择“少数”键?任何模式或随机?我会有一个选择键的列表,你只想检查键是否存在,或者你想检查键中的值是否相等?是的,这正是我一直在做的。但问题是我现在有数百万个这样的哈希映射在如此庞大的数据中这样做非常耗时。所以我只是想知道是否有更好的解决方案是的,可能有更好的解决方案,比如用其他数据结构编写自己的优化哈希算法,但当您使用HashMap时,它是默认优化的。因此,任何额外的操作都只会降低性能。