当前位置: 代码迷 >> java >> 通过循环将数据添加到HashMap中
  详细解决方案

通过循环将数据添加到HashMap中

热度:89   发布时间:2023-08-02 10:38:04.0

我正在尝试将从序列文件中读取的数据放入Hash Map。 循环完成后,我尝试打印错误的内容。

我试图只在第一个循环中打印键和值,结果是正确的。 当我尝试在第二个while循环中打印键时,结果是几个重复的记录。 我无法弄清楚出了什么问题。

    while(reader.next(key, value)) {
        byte[] value_bytes = value.getBytes();
        data_HashMap.put(key, value_bytes);
    }

    IOUtils.closeStream(reader);

    Iterator<Text> keySetIterator = data_HashMap.keySet().iterator();
    while(keySetIterator.hasNext()){
      Text index = keySetIterator.next();
      System.out.println("key: " + index);
    }

这是结果

Key: 123
Key: 123
Key: 123
Key: 123
Key: 123
Key: 123

如果我这样修改第一个while循环

while(reader.next(key, value)) {
    byte[] value_bytes = value.getBytes();
    System.out.println("Key: " + key);
}

这是结果,它是正确的。

Key: 123
Key: 456
Key: 789
Key: 741
Key: 852
Key: 963

您将重新使用同一密钥:

while(reader.next(key, value)) {
    byte[] value_bytes = value.getBytes();
    data_HashMap.put(**key**, value_bytes);
}

我不知道类型是什么,但是如果是Text ,只需复制它或使用String

while(reader.next(key, value)) {
    byte[] value_bytes = value.getBytes();
    data_HashMap.put(key.toString(), value_bytes);
}

您还将使用值字节来遇到相同的问题,因此我建议您也对此数组进行防御性的复制。

  相关解决方案