嗨,我有每个大小为 8 字节的字节数组,我需要将它们存储在 HashMap 或哈希表中。例如,假设我有 1000 个 block ...那么它将存储第一个键和值(bytearray),然后当传递 block2 时,它应该检查它是否已经存在于 hahtable 中,如果不存在,它应该递增,并且计数应该递增。我已经编写了存储代码,但问题是它无法搜索,可能是因为我在字节数组中存储的方式。
代码:
int collisions = 0;
Hashtable<Integer, Long> ht = new Hashtable<Integer, Long>();
// Given bloc1 value here
if(ht.contains(bloc1)) {
collisions++;
}
else {
ht.put(i,ByteBuffer.wrap(bloc1).getLong());
}
问题是:ht.contains 没有给出所需的 o/p
最佳答案
byte[]
对象,以及 Java 中的其他数组对象都有继承于 Object
的 equals()
方法,即: e.通过引用进行比较,而不是通过数组内容进行比较。
解决问题的最简单方法(无需额外依赖库)是将 8 字节数组存储为 long
:
Map<Long, Value> map = new HashMap<>();
...
// map.put(byteArray, value);
map.put(ByteBuffer.wrap(byteArray).getLong(), value);
关于java - 如何在java中的hashmap或hashtable中存储字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26791295/