gpt4 book ai didi

java - Complex HashMap 序列化后有不同的hashCode

转载 作者:行者123 更新时间:2023-12-04 06:56:45 28 4
gpt4 key购买 nike

我正在将一个 xml 文件解析为一个复杂的 HashMap,如下所示:

Map<String, Map<String, EcmObject>

Ecm对象:
public class EcmObject implements Comparable, Serializable {
private final EcmObjectType type;
private final String name;
private final List<EcmField> fields;
private final boolean pages;

// getter, equals, hashCode
}

Ecm 对象类型:
public enum EcmObjectType implements Serializable {
FOLDER, REGISTER, DOCUMENT
}

字段
public class EcmField implements Comparable, Serializable {
private final EcmFieldDataType dataType;
private final EcmFieldControlType controlType;
private final String name;
private final String dbname;
private final String internalname;
private final Integer length;
// getter, equals, hashCode
}

EcmField 数据类型
public enum EcmFieldDataType implements Serializable {
TEXT, DATE, NUMBER, GROUP, DEC;
}

和 EcmFieldControlType
public enum EcmFieldControlType implements Serializable{
DEFAULT, CHECKBOX, LIST, DBLIST, TEXTAREA, HIERARCHY, TREE, GRID, RADIO, PAGECONTROL, STATIC;
}

我已经通过使用 commons lang 的 EqualsBuilder 和 HashCodeBuilder 覆盖了所有 hashCode 和 equal 方法。现在,当我以这种方式复制 A HashMap 时:
Map<String, Map<String, EcmObject>> m = EcmUtil.convertXmlObjectDefsToEcmEntries(new File("e:\\objdef.xml"));
Map<String, Map<String, EcmObject>> m2;

System.out.println(m.hashCode());

ByteArrayOutputStream baos = new ByteArrayOutputStream(8 * 4096);
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(m);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);

m2 = (Map<String, Map<String, EcmObject>>) ois.readObject();

System.out.println(m.hashCode());
System.out.println(m2.hashCode());

m.hashCode() 是 不等于 到 m2.hashCode()

这是我的输出:
-1639352210
-2071553208
1679930154

另一个奇怪的事情是,例如。 10 次 m 具有相同的哈希码,突然在第 11 次时哈希码不同...

任何想法这是关于什么?

最佳答案

enum的哈希码JVM 实例之间不一致。您可以使用 enum.toString() 的哈希码反而。

关于java - Complex HashMap 序列化后有不同的hashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2476738/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com