我正在将一个 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
}
EcmObject类型:
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
}
EcmFieldDataType
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;
}
我已经用 usind 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 次哈希码不同......
有什么想法吗?