【问题标题】:How to store bytearrays in hashmap or hashtable in java如何在java中将字节数组存储在hashmap或hashtable中
【发布时间】:2015-01-03 15:46:52
【问题描述】:

嗨,我有每个大小为 8 个字节的字节数组,我需要将它们存储在哈希图或哈希表中。例如说我有 1000 个块......然后它将存储第一个键和值(字节数组),然后当 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

【问题讨论】:

  • 所以你想在添加新的字节数组之前搜索字节数组,或者键?这个问题确实需要代码。
  • 请展示你的尝试,尤其是在提到你有代码之后
  • 您需要编辑您的问题以使其更加清晰,然后我们才能为您提供帮助。字节数组是键还是值?如果它们是值,那么就没有问题,并且您的错误在其他地方。还请详细说明您遇到的问题。
  • 我需要将字节数组存储在值中......当我添加新值时,键只会增加......
  • 基本上我想做的是说我有 1000 字节大小为 8 字节的数组..我需要找到冲突..

标签: java hashmap hashtable


【解决方案1】:

解决方案: int 碰撞 = 0; 哈希表 ht = new Hashtable(); // 这里给定 bloc1 值 if(ht.contains(ByteBuffer.wrap(bloc1).getLong())) {碰撞++;} 别的 { ht.put(i,ByteBuffer.wrap(bloc1).getLong()); }

【讨论】:

    【解决方案2】:

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

    解决问题的最简单方法(无需额外依赖库)是将 8 字节数组存储为 longs:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 2018-09-24
      • 2012-06-09
      • 1970-01-01
      • 2018-01-31
      • 2016-04-03
      • 1970-01-01
      相关资源
      最近更新 更多