gpt4 book ai didi

java - 对于从自定义类映射的 HashMap,如何使两个等效键映射到 say 值?

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

我有一个自定义类,例如,假设它是没有顺序的元组。

public class UnorderedTuple {  
Integer i1 = null; Integer i2 = null;

UnorderedTuple(Integer int1, Integer int2) { i1 = int1; i2 = int2; }

boolean equals(UnorderedTuple t) { return t.i1 == i1 && t.i2 == t2 || t.i2 == i1 && t.i1 == i2; }
}

就像我说的,一个愚蠢的例子。现在,假设我有

Map<UnorderedTuple, Integer> m = new HashMap<UnorderedTuple, Integer>();

理想情况下,我想要这个功能:

UnorderedTuple ut1 = new UnorderedTuple(1,2);
UnorderedTuple ut2 = new UnorderedTuple(2,1);

m.put(ut1,2);
m.put(ut2,3);
System.out.println(m.get(ut1)==3); //ideally returns true

我是否需要实现或扩展某些东西才能拥有此功能?以同样的方式,如果你使用 2 个不同但相等的字符串,或整数,或任何作为键的东西,它会正确映射它,但如果我按照写的方式实现它,它会分别对待 ut1 和 ut2。即使我构造相同的 ut1 和 ut2,它也会做同样的事情。

感谢您的帮助。

最佳答案

您需要覆盖 hashCode()...在这种情况下,您可能会通过对所有涉及的字段的哈希码进行异或来实现它,以获得您想要的顺序独立性。

您还需要覆盖 equals(Object) 而不是仅仅实现 equals(UnorderedTuple)

我还注意到您使用“==”来比较 Integer 的实例:不要那样做。由于装箱规则,它会在您给出的测试用例中工作,但如果您尝试使用超过 127 的值,您很可能会遇到问题 - 它只比较 references 而不是 值(value)观。调用 equals 以正确比较值。

关于java - 对于从自定义类映射的 HashMap,如何使两个等效键映射到 say 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4794953/

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