如何在java中的hashmap或hashtable中存储bytearrays

时间:2014-11-06 23:21:15

标签: java hashmap hashtable

嗨我有每个大小为8个字节的字节数组,我需要将它们存储在散列映射或散列表中。例如,假设我有1000个块...然后它将存储第一个键和值(bytearray),然后当块2通过时,它应该检查它是否已经存在于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

2 个答案:

答案 0 :(得分:0)

byte[]个对象和Java中的其他数组对象具有从equals()继承的Object方法,i。即通过引用而不是数组内容进行比较。

解决问题的最简单方法(没有对库的额外依赖)是将8字节数组存储为long s:

Map<Long, Value> map = new HashMap<>();
...
// map.put(byteArray, value);
map.put(ByteBuffer.wrap(byteArray).getLong(), value);

答案 1 :(得分:0)

解决方案:             int collisions = 0;            Hashtable ht = new Hashtable();           //在这里给出bloc1值              如果(ht.contains(ByteBuffer.wrap(bloc1).getLong()))                 {碰撞++;}                 其他{                 ht.put(I,ByteBuffer.wrap(bloc1).getLong());                 }