具有相同元素但顺序不同的两个 Map 不应相等,并-6ren">
gpt4 book ai didi

java - 需要一个保留顺序并具有 "order sensitive"equals/hashCode 的 map

转载 作者:搜寻专家 更新时间:2023-11-01 03:10:18 26 4
gpt4 key购买 nike

是否有一个 java 集合像 LinkedHashMap 一样工作,但也反射(reflect)了 equals 和 hashCode 中的顺序?-> 具有相同元素但顺序不同的两个 Map 不应相等,并且应具有不同的 hashCode。

解决方案基于 Peter Lawrey 的回答(xAxis 是 LinkedHashMap):

哈希码:

...
result = prime * result + ((xAxis == null) ? 0 : xAxis.hashCode() + xAxis.toString().hashCode());
...

等于:

...
if (xAxis == null) {
if (other.xAxis != null) {
return false;
}
} else if (!xAxis.equals(other.xAxis)) {
return false;
} else if (!xAxis.toString().equals(other.xAxis.toString())) {
return false;
}
...

(基于eclipse生成的代码)

最佳答案

可以覆盖HashMap的hashCode和equals。

由于 HashMap 没有顺序,这是非常危险的,但如果你愿意,你可以这样做。您可能会发现比较每个的 toString() 是您真正需要的。

顺便说一句:为了了解 HashMap 的键可以有多少不同的顺序,这篇博文让您了解如何使用 HashSet(它使用相同的代码)

http://vanillajava.blogspot.co.uk/2011/09/order-of-elements-in-hash-collection.html

关于java - 需要一个保留顺序并具有 "order sensitive"equals/hashCode 的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12160656/

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