У меня есть следующее определение карты, где map.containsKey() явно не работает:хроники Карта 2 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 Карта 2.4.17 и это слишком сложно перейти на версия 3 в моем проекте.
Сразу после ввода записи с ключом «abc» метод containsKey() возвращает false для ключа «abc». Я смущен, почему это не сработает. Строковый тип - это строка Java по умолчанию, которая имеет правильный метод hashCode().
Он по-прежнему не работает: http://pastebin.com/4ivAH2dK I 'm missing something ... – Soid
вы просто хотите создать ChronicleMap, потому что если это все, что вы хотите сделать, есть более простые способы построения карты, которую я могу вам показать, или у вас есть использовать KeyMarshaller по другой причине –
Я обнаружил, что если я не использую константуKeySizeBySample() и averageValueSize(), чем это работает. Это может быть связано с этой проблемой, которая была открыта в течение года для CM 2.x: https://github.com/OpenHFT/Chronicle-Map/issues/86 – Soid