2014-11-03 64 views
0

我想使用HashSet<>來存儲大量(50-100)某個自定義類,我們稱之爲「海報」。據我所知,使用HashSet<>List<>以上的大量項目有一些性能優勢。但爲了利用這種性能增益,我是否需要定義這兩者?HashSet中的自定義類<>

  • 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(); 
} 
+0

的[如何HashSet的比較平等要素]可能重複(http://stackoverflow.com/questions/8952003/how-does-hashset-compare-elements- for-equality) – BartoszKP 2014-11-03 17:46:51

+0

你希望得到什麼樣的性能好處?檢查哈希集中項目的存在速度比列表快很多,但對於其他任何情況,它都會稍微慢一些。 – Guffa 2014-11-03 17:51:00

+0

這會在很多地方使用,我希望從數據層返回HashSet 以供其他許多方法使用,只是平均尋找最有效的方法。 – IKnowledge 2014-11-03 17:53:47

回答

1

是的,如果你實現IEqualityComparer<Poster>,你需要實現這些方法。您需要將相等比較器傳遞給構造函數HashSet<Poster>

另一種選擇是在Poster類本身中實現相等/散列碼邏輯;在這種情況下,你必須重寫這些方法:

public bool Equals(object obj) 
public int GetHashCode() 
相關問題