gpt4 book ai didi

java - 使用 Java,如何在不重复比较的情况下将 HashMap 中的每个条目与同一 HashMap 中的每个其他条目进行比较?

转载 作者:搜寻专家 更新时间:2023-11-01 01:44:55 25 4
gpt4 key购买 nike

我目前正在使用 2 个 for 循环来比较所有条目,但我得到了重复比较。因为 HashMaps 没有排序,所以我不知道如何消除已经进行的比较。例如,我有这样的东西:

    for(Entry<String, String> e1: map.entrySet())
{
for(Entry<String, String> e2: map.entrySet())
{
if (e1.getKey() != e2.getKey())
{
//compare e1.getValue() to e2.getValue()
}
}
}

问题在于第一个条目将与第二个条目进行比较,然后是第三个条目,依此类推。但随后第二个条目将再次与第一个条目进行比较,依此类推。然后第三个条目将与第一个条目进行比较,然后是第二个条目,然后是第四个条目,等等。有没有更好的方法来迭代 HashMaps 以避免进行重复比较?

附加信息:

更具体地说,希望能回答您的问题,我拥有的 HashMap 正在存储文件名(键)和文件内容(值)——只是文本文件。 HashMap 已通过遍历包含我要比较的文件的目录来填充。然后我正在做的是通过一些算法运行文件对以确定每对文件之间的相似性。我不需要将文件 1 与文件 2 进行比较,然后再将文件 2 与文件 1 进行比较,因为我只需要将 2 个文件进行一次比较。但我确实需要将每个文件与其他文件进行一次比较。我对使用 HashMaps 是全新的。 agim 在下面的回答可能正好适合我的目的。但我也会尝试围绕下面的 Evgeniy Dorofeev 和 Peter Lawrey 的解决方案进行思考。我希望这有助于更好地解释事情。

最佳答案

如果您不小心,消除重复项的成本至少会高于对键进行冗余比较的成本。

您可以使用 System.identityHashCode(x) 对 key 进行排序

for(Map.Entry<Key, Value> entry1: map.entrySet()) {
Key key1 = entry1.getKey();
int hash1 = System.identityHashCode(key1);
Value value1 = entry1.getValue();
for(Map.Entry<Key, Value> entry2: map.entrySet()) {
Key key2 = entry2.getKey();
if (key1 > System.identityHashCode(key2)) continue;

Value value2 = entry1.getValue();
// compare value1 and value2;
}
}

关于java - 使用 Java,如何在不重复比较的情况下将 HashMap 中的每个条目与同一 HashMap 中的每个其他条目进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189202/

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