gpt4 book ai didi

Java HashMap 具有重复键的疯狂行为

转载 作者:行者123 更新时间:2023-11-30 03:30:14 25 4
gpt4 key购买 nike

这确实很奇怪。这是我的代码:

Map<Text,Integer> frequencies = new HashMap<Text,Integer>();
Text currentBrowser = new Text();

// update map with browser frequencies
while(values.hasNext()){
currentBrowser = values.next();
if (frequencies.containsKey(currentBrowser))
frequencies.put(currentBrowser, frequencies.get(currentBrowser) + 1);
else
frequencies.put(currentBrowser, new Integer(1));
}

这个想法是 valuesIterator<Text> ,并且它包含浏览器列表(Chrome、IE 等)。我只是想创建一个 map 来存储每个浏览器的频率(如果 Chrome 在列表中出现 3 次 - 我希望其值为 3,等等)

问题是这行不通。当我逐步调试它时,会发生以下情况:第一个浏览器是 Explorer,它正确地将其放入 map 中: {Explorer=1} 。接下来是 Safari,因此它进入 else ,但这就是 map 上发生的情况:{Safari=1, Safari=1} !接下来的两个浏览器是 Safari,它确实正确插入了这些浏览器: {Safari=1, Safari=3} ,但随后出现了 Firefox,发生的情况如下:{Firefox=1, Firefox=1, Firefox=3} 。因此您可以看到,每次将新键插入映射时,它也会更改所有其他键。第一个 Firefox 实际上应该是 Explorer,第二个应该是 Firefox,第三个应该是 Safari。

这里发生了什么?

最佳答案

根据您的描述,您的问题似乎是“currentBrowser”对象实际上没有改变。含义:在每次迭代期间添加相同的对象;除此之外,您还要更改该对象的内部表示。

长话短说:我认为问题在于你的迭代器始终返回相同的对象。

关于Java HashMap 具有重复键的疯狂行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29209151/

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