HashMap包含方法

时间:2014-11-06 19:45:47

标签: hashmap dart

我在对象中定义了一个自定义运算符:

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吗?

1 个答案:

答案 0 :(得分:4)

除了定义相等性之外,您还必须提供hashCode实现。

作为HashMap docs州:

  

HashMap的键必须具有一致的Object.operator ==和   hashCode实现。这意味着==运算符必须定义   键上的稳定等价关系(反身,对称,   传递,并且随着时间的推移而保持一致),并且hashCode必须是   对于被==。

认为相等的对象也是如此