Производительность хеширования в HashSet <int>для списка <int>с Contains - PullRequest
0 голосов
/ 27 апреля 2020

Я ищу сравнение / соображения производительности между списком целых чисел и набором ха sh целых чисел . Это то, о чем В чем разница между HashSet и List ? , для T как целое число.

У меня будет до нескольких тысяч целых чисел, и я Я хочу выяснить, для отдельных целых чисел, содержатся ли они в этом наборе.

Теперь, конечно, это кричит о наборе ха sh, но мне интересно, выгодно ли здесь хеширование, поскольку они просто целые числа начать с. Разве их хеширование сначала не добавит ненужных издержек здесь?

Или другими словами: Является ли использование набора ha sh полезным даже для наборов целых чисел?

Ответы [ 2 ]

4 голосов
/ 27 апреля 2020

Хеширование целого числа очень дешево, как вы можете видеть в исходном коде метода Int32.GetHashCode:

// The absolute value of the int contained.
public override int GetHashCode()
{
    return m_value;
}

Ха sh числа - это сам номер. Это не может быть дешевле, чем это. Так что нет причин беспокоиться о накладных расходах. Поместите свои числа в HashSet и наслаждайтесь поиском с O (1) вычислительной сложностью.

0 голосов
/ 27 апреля 2020

Что бы там ни было, существует простое, но эффективное правило:

  • Коллекция в основном используется для добавления и повторения с очень небольшим количеством поиска => Использовать список

  • Коллекция тяжело используется для исследований => Используйте HashSet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...