我试图将某些值添加到地图
Map<byte[], byte[]> samplerMap = new HashMap<>();
samplerMap.put(Bytes.toBytes("key"), Bytes.toBytes("value"));
从地图中获取值
samplerMap.get(Bytes.toBytes("key"))
当我调试此内容时,我获得了null
值。使用byte[]
作为地图的关键字时是否有任何特殊情况。我该如何解决这个问题?
答案 0 :(得分:1)
您不能将数组用作HashMap
的键,因为数组不会覆盖equals
和hashCode
的默认实现。因此,包含完全相同元素的两个不同数组实例将被视为不同的键。
您可以使用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);
}
}