使用byte []键从HashMap获取值

时间:2018-06-15 07:56:28

标签: java

我试图将某些值添加到地图

Map<byte[], byte[]> samplerMap = new HashMap<>();
samplerMap.put(Bytes.toBytes("key"), Bytes.toBytes("value"));

从地图中获取值

samplerMap.get(Bytes.toBytes("key"))

当我调试此内容时,我获得了null值。使用byte[]作为地图的关键字时是否有任何特殊情况。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您不能将数组用作HashMap的键,因为数组不会覆盖equalshashCode的默认实现。因此,包含完全相同元素的两个不同数组实例将被视为不同的键。

您可以使用List<Byte>作为密钥。

答案 1 :(得分:1)

问题是两个byte[]使用Object.hashCode,它会测试对象的实例。由new byte[...]创建的两个数组实例将产生两个不同的哈希码,密钥,因此几乎总是返回null。

此外equals也不起作用,因此byte[]没有选项。

你可以使用字符串本身,因为你实际上在做"key".getBytes(StandardCharsets.UTF_8)

或者创建包装类:

public class ByteArray {
    public final byte[] bytes;
    public ByteArray(byte[] bytes) {
        this.bytes = bytes;
    }
    @Override
    public boolean equals(Object rhs) {
        return rhs != null && rhs instanceof ByteArray
            && Arrays.equals(bytes, ((ByteArray)rhs).bytes);
    }
    @Override
    public int hashCode() {
        return Arrays.hashCode(bytes);
    }
}