gpt4 book ai didi

java - HashMap 中的重复键

转载 作者:行者123 更新时间:2023-12-02 00:05:23 26 4
gpt4 key购买 nike

我的 HashMap 遇到了奇怪的情况。在迭代 HashMap 的 keySet() 时,我得到了重复的值。在尝试获取值时,我得到了 NULL。

这是我的 HashMap 实现:

    import java.util.ArrayList;
import java.util.HashMap;

public class StreetsMap extends HashMap<String, ArrayList<String[]>> {
public void put(String key, String[] data) {
ArrayList<String[]> current = get(key);
if (current == null) {
current = new ArrayList<String[]>();
super.put(key, current);
}
current.add(data);
}
}

在从 CSV 文件读取行时,我正在用值填充 HashMap。
我在 CSV 中有类似的内容(原始列表更长):

位置代码、街道名称、起点、终点、奇偶数

01001, JustAStreet ST, 1, 11, odd
01001, JustAStreet ST, 17, 47, odd
... more of this
01001, JustAStreet ST, 2, 30, even
01001, JustAStreet ST, 40, 80, even
01001, AnotherStreet ST, 3, 27, odd
01001, AnotherStreet ST, 9, 51, odd
... and even more
01001, AnotherStreet ST, 0, 50, even
01001, AnotherStreet ST, 2, 14, even
01001, AnotherStreet ST, 0, 100, even

我用逗号分割一行,修剪值并用数据填充 HashMap:

    String[] lines = inputText.split("\n");

StreetsMap streetsData = new StreetsMap(); //

for (String line : lines) {
String[] newLine = line.split(",");

String[] streetData = new String[4];

streetData[0] = newLine[0].trim(); // Location code
streetData[1] = newLine[2].trim(); // Start
streetData[2] = newLine[3].trim(); // End
streetData[3] = newLine[4].trim(); // OddEven

streetsData.put(newLine[1].trim(), streetData);

问题就从这里开始。如果我迭代 keySet():

    for (String name : streetsData.keySet()) {
System.out.println(name);
}

我有这样的东西:

  • JustAStreet
  • 另一条街
  • 另一条街
  • JustAStreet
  • JustAStreet

当我在 HashMap 迭代期间尝试使用 .get(key) 方法访问数据时,有时会得到 null。所以我正在失去值(value)观。 :(

我的问题是:HashMap 中怎么可能存在重复的键?我做错了什么。

UPD: key 是唯一的。在另一个类(class)发现了这个问题。

最佳答案

how can it be real having a duplicated key in a HashMap? What I'm doing wrong.

字符串很可能不完全相同。例如AStreetAStreet{space}看起来一样,但其实不然。更糟糕的是,有些字符没有宽度;)

我建议您打印Array.toString(text.getBytes())对于每个键,查看它们中有哪些字节。

<小时/>

如果在将 key 添加到 map 后对其进行修改,则可能会获得重复的 key (这是您无法获得的)。如果某个键的哈希码在添加后发生变化,则该键可能位于错误的位置。当您进行迭代时,它会出现,但不会被视为要在 put 上替换的值,并且您不会在 get 上找到它。

简而言之,您应该注意不要更改 hashcode、equals 或compareTo 中使用的任何字段。

关于java - HashMap 中的重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14002027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com