Использование HashMap для поиска возможностей - PullRequest
0 голосов
/ 29 октября 2018

Мне нужно использовать структуру данных, которая может обеспечить низкое время поиска, но не нужно хранить пары ключ-значение.

Все, что мне нужно, это проверить, существует ли элемент в коллекции.

Я подумываю вставить все значения из массива в хэш-карту (с ключом и значением одинаково), а затем выполнить операции поиска над этим.

Есть ли альтернативы или это разумно?

Ответы [ 4 ]

0 голосов
/ 29 октября 2018

Вы можете использовать Bloom Filter. он используется для проверки того, является ли элемент членом набора. Возможны ложные совпадения, а ложные отрицания - нет, другими словами, запрос возвращает либо «возможно, в наборе», либо «определенно не в наборе». Элементы могут быть добавлены в набор, но не удалены (хотя это может быть решено с помощью фильтра «подсчета»); чем больше элементов добавлено в набор, тем больше вероятность ложных срабатываний.

Классная статья о Bloom Filters.

0 голосов
/ 29 октября 2018

Если вы не хотите поддерживать пары ключ-значение, рассмотрите возможность использования java.util.HashSet

Я предполагаю, что вашим основным вариантом использования будет добавление к нему элементов, а затем вызов 'содержит', который имеет сложность O (1)

0 голосов
/ 29 октября 2018

Вы можете перейти с HashSet . contains(Object o) метод может помочь вам в выполнении желаемой операции. Возвращает true, если элемент присутствует, в противном случае возвращает false.

0 голосов
/ 29 октября 2018

Зачем вам нужен HashMap для этого? Для этого есть несколько примеров ArrayList.

ArrayList, List, LinkedList

Вы можете определить объект, который хотите сохранить в Списке, используя оператор diamond

LinkedList<String> теперь в этом списке хранятся строковые значения.

или, как предлагают комментарии, вы можете использовать HashSet

HashSet<String> hashSet = new HashSet<>();
hashSet.add("Item");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...