我有以下地图定义,其中 map.containsKey() 显然不起作用:
ChronicleMapBuilder<String, String> cmBuilder = ChronicleMapBuilder.of(String.class, String.class);
cmBuilder.constantKeySizeBySample("abcde")
.averageValueSize(128)
.entries(1024)
.keyMarshaller(new MyStringMarshaller())
.valueMarshaller(new MyStringMarshaller());
Map myMap = cmBuilder.createPersistedTo(new File("/tmp/test-map"));
myMap.put("abc", "123");
System.out.println(myMap.containsKey("abc")); // prints false
...
public static class MyStringMarshaller implements BytesMarshaller<String> {
@Override
public void write(Bytes bytes, String str) {
bytes.writeUTF(str);
}
@Override
public String read(Bytes bytes) {
return read(bytes, null);
}
@Override
public String read(Bytes bytes, String str) {
return bytes.readUTF();
}
}
我使用 Chronicle Map 2.4.17,在我的项目中迁移到版本 3 太难了。
在输入带有键“abc”的条目后,containKey() 方法为键“abc”返回 false。我很困惑为什么它不起作用。String 类型是具有正确 hashCode() 方法的默认 Java 字符串。