java - MapDB实现BTreeMap时如何使用byte数组作为key

标签 java mapdb

有没有办法像这样在 BTreeMap 中使用字节数组作为键:

BTreeMap<byte[], Integer> myBTreeMap = db.getTreeMap("myBTreeMap");

目前在尝试将新对象放入 map 时抛出此异常:

Exception in thread "main" java.lang.ClassCastException: [B cannot be cast to java.lang.Comparable ...

使它起作用的正确方法是什么?我想知道不使用包装类的解决方案。

欢迎提出任何想法。

[更新]

我使用了 SJuan76 提出的解决方案:

    BTreeMap<byte[], Integer> myBTreeMap = db.createTreeMap("myBTreeMap")
            .comparator(SignedBytes.lexicographicalComparator())
            .makeOrGet();

如果需要,可以在 Guava 库中找到使用过的比较器。

最佳答案

MapDB提供byte[]数组比较器:Fun.BYTE_ARRAY_COMPARATOR

这是一个如何在代码中使用的示例:

   Map<byte[], Object> map = db.createTreeMap("map")
               .comparator(Fun.BYTE_ARRAY_COMPARATOR)
               .makeOrGet();

关于java - MapDB实现BTreeMap时如何使用byte数组作为key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24670628/

相关文章:

java - 实现 Nashorn ClassFilter 等价物

java - 同步数组列表中的竞争条件

database - MapDB 与常规数据库

java - 序列化和反序列化 mapDb 中的对象 - Java

java - MapDB中领域对象的序列化

java - 通过 IntelliJ 运行配置运行 Spring boot

java - ObjectInputStream available() 方法未按预期工作 (Java)

java - 使用 javaparser 获取方法语句

java - 这是否被视为反射(reflection)?在何种程度上?

java - MapDB ClassNotFoundException : kotlin. jvm.internal.Intrinsics