繁体   English   中英

制作HashSet <MyType> 具有相同值的对象之间有所不同

[英]Making HashSet<MyType> differ between objects with the same values

我已经重写了Equal(Object comparee)方法,但是当我向HashSet中添加对象时,我仍然会得到双打。 我错过了什么? MyType类型包含两个int字段(比方说)。 HashSet是否是错误的收集类型?

我希望添加一些MyType东西,但是该集合仅存储由我定义的唯一(使用Equals方法或任何其他方式)的唯一的东西。

当您重写Equals()时,应始终重写GetHashCode() Equals() 我通常会为该方法返回某种主键(如果有)。 否则,您可以查看该线程以获取实现它的想法。

理解这两种方法之间的关系的关键是:

  • 如果两个条目具有不同的哈希码,则它们肯定不相等。
  • 如果两个条目具有相同的哈希码,则它们可能相等,因此请调用Equals()进行确定。

您还需要重写GetHashCode() 否则,您的对象将具有不同的哈希码,因此将自动假定为不同。 从您的对象中获取一些独特的价值,并在可用时使用它,或者仅生成您自己的价值。

而且,不要懒惰,也不要对它们全部使用相同的哈希码; 这将HashSet的目的。

因此,对于具有两个int字段的示例,您可以执行以下操作:

public override int GetHashCode() {
    return field1 ^ field2;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM