Пользовательский класс внутри HashSet <>

1

Я хотел бы использовать HashSet<> для хранения больших количеств (50-100) определенного пользовательского класса, назовем его "Плакат". Насколько я знаю, есть преимущество в производительности при использовании 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();
}
  • 0
    возможный дубликат Как HashSet сравнивает элементы на равенство
  • 0
    Какую выгоду в производительности вы надеетесь получить? Проверка на наличие элемента в хэш-наборе выполняется намного быстрее, чем в списке, но для всего остального это будет немного медленнее.
Показать ещё 1 комментарий
Теги:
hashset

1 ответ

3
Лучший ответ

Да, если вы реализуете IEqualityComparer<Poster>, вам необходимо реализовать эти методы. Вам нужно будет передать сопоставление равенства с конструктором HashSet<Poster>.

Другой вариант - реализовать логику равенства /hashcode в самом классе Poster; в этом случае вы должны переопределить эти методы:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню