HashSet<>中的自定义类

3
我想使用HashSet<>来存储大量(50-100)的某个自定义类,我们称之为“Poster”。据我所知,在处理大量项目时,使用HashSet<>List<>有一些性能优势。但是,为了利用这种性能提升,我是否“需要”定义这两个内容?
  • public bool Equals(Poster a, Poster b)
  • public int GetHashCode(Poster obj)
更新:对于任何想要实现这些的人,这是我的做法:
public bool Equals(PosterImage a, PosterImage b)
{
    return (a.ApiId == b.ApiId);
}

public int GetHashCode(PosterImage obj)
{
    return ((PosterImage) obj).ApiId.GetHashCode();
}

可能是重复的问题:HashSet如何比较元素的相等性 - BartoszKP
你希望获得什么样的性能优势?在哈希集合中检查项的存在要比在列表中快得多,但对于其他任何操作来说,它可能会稍微慢一些。 - Guffa
这段代码将在许多地方使用,我希望从数据层返回 HashSet<Poster>,以供许多其他方法使用,只是寻找平均效率最高的方法。 - IKnowledge
1个回答

5

如果您实现了一个IEqualityComparer<Poster>,您需要实现这些方法。您需要将相等性比较器传递给HashSet<Poster>构造函数。

另一种选择是在Poster类本身中实现相等性/哈希码逻辑;在这种情况下,您必须覆盖这些方法:

public bool Equals(object obj)
public int GetHashCode()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接