2014-11-03 2 views
0

을 사용하여 특정 사용자 정의 클래스의 대량 (50-100)을 저장하려면 "포스터"라고합니다. 아는 한 List<> 이상의 많은 수의 항목에 HashSet<>을 사용하면 성능상의 이점이 있습니다. 그러나이 성능 향상을 이용하려면이 두 가지를 모두 정의해야합니까?HashSet 내부의 사용자 정의 클래스 <>

  • public bool Equals(Poster a, Poster b)
  • public int GetHashCode(Poster obj)

UPDATE : 다음을 구현하는 방법을 찾고있는 누군가를 위해,이 내가했던 방법입니다

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- 동등성) – BartoszKP

+0

어떤 종류의 성능 혜택을 얻으려고합니까? 해시 집합에있는 항목의 존재 여부를 확인하는 것이 목록보다 훨씬 빠르지 만, 다른 경우에는 다소 느려집니다. – Guffa

+0

이것은 꽤 많은 장소에서 사용될 것입니다. HashSet 을 데이터 레이어에서 반환하여 다른 많은 방법으로 사용할 수 있기를 기대하면서 평균적으로 가장 효율적인 방법을 찾고 있습니다. – IKnowledge

답변

1

것은 예, 구현 경우 IEqualityComparer<Poster>, 이러한 방법을 구현해야합니다. 동등 비교자를 HashSet<Poster> 생성자에 전달해야합니다.

다른 옵션은 Poster 클래스 자체에 등호/해시 코드 논리를 구현하는 것입니다. 이 경우 당신은이 메소드를 오버라이드 (override)합니다

public bool Equals(object obj) 
public int GetHashCode() 
관련 문제