我在对象中定义了一个自定义运算符:
class CharNode {
String char = "x";
String color = "#000000";
String backgroundColor = "none";
CharNode(this.char) { }
bool operator ==(CharNode other) {
return (other.char == char && other.backgroundColor == other.backgroundColor && other.color == color);
}
}
当我比较两个CharNodes时(例子):
CharNode cn1 = new CharNode("A");
CharNode cn2 = new CharNode("A");
print((cn1 == cn2).toString());
打印为true。
问题在于HashMap(示例)并在其中找到一个对象:
HashMap<CharNode, int> map = new HashMap<CharNode, int>();
map[cn1] = 0;
print((map.contains(cn2)).toString());
打印错误。
问题是:如何让HashMap使用我的自定义运算符?我必须使用forEach吗?
答案 0 :(得分:4)
除了定义相等性之外,您还必须提供hashCode实现。
作为HashMap docs州:
HashMap的键必须具有一致的Object.operator ==和 hashCode实现。这意味着==运算符必须定义 键上的稳定等价关系(反身,对称, 传递,并且随着时间的推移而保持一致),并且hashCode必须是 对于被==。
认为相等的对象也是如此