gpt4 book ai didi

java - map 中的复合键

转载 作者:行者123 更新时间:2023-12-01 19:17:07 26 4
gpt4 key购买 nike

您好,我找不到任何有关如何使两个 key 看起来相等的信息。也就是说,我需要提供一个将由 map.put() 使用的自定义比较方法,实现比较没有帮助。

例如,此代码无法按预期工作 - 就我的程序而言,两个键 n 和 n2 是相同的。

private class N implements Comparable<N> {
int value;

int stuff;

String z;

@Override
public int compareTo(N arg0) {
if (arg0.z.equals(z))
return 0;
return 1;
}

}

public void dostuff() {
HashMap m = new HashMap();

N n = new N();
n.z = "1";

N n2 = new N();
n2.z = "1";

m.put(n, "one");
m.put(n2, "two");

// will print refs to two instances! - wrong
Iterator it = m.keySet().iterator();
while (it.hasNext()) {
System.err.println(it.next());
}
}

最佳答案

您需要覆盖 equalshashCode - HashMap 不使用 compareTo,这意味着排序

请注意,您的 compareTo 实现已经损坏,因为它实际上测试相等性。特别是,x.compareTo(y)y.compareTo(x) 都返回 1 违反了 compareTo 的约定。 :

The implementor must ensure sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) for all x and y.

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

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