2014-02-10 4 views
0
int index = Collections.binarySearch(myList, SearchWord); 
System.out.println(myList.get(index)); 

На самом деле, я сохранил 1 миллион слов в списке массивов, теперь мне нужно найти конкретное слово с помощью ключа. В результате не будет ни одного слова, оно может содержать несколько слов.ArrayList Поиск Несколько слов

Предположим, что если я напечатаю «A», значит, выдан [Aarhus, Aaron, Ababa, ...]. Результат зависит от поискового слова. Как я могу это сделать и какой алгоритм сортировки лучше всего в коллекциях.

+0

Для вашего требования вы должны выбрать trie datastructure. Это даст вам то, что вам нужно (Suggestester) в простой форме. –

+1

Ваш поиск наилучшим образом соответствует нечеткому поиску. Я предлагаю вам выбрать для него поисковую систему. как Appache lucene, он будет очень быстрым, надежным и простым в управлении. Более того, сохранение arraylist в миллион слов - это не очень хорошая идея. –

+0

Что касается вашего примера, вам всегда нужны слова, начинающиеся с определенной строки? – wdosanjos

ответ

0

Варианты:

  1. Если вы хотите придерживаться списка массива, сортировки, прежде чем искать. Затем найдите первый ключ, который соответствует вашим критериям поиска и повторите его, пока не найдете ключ, который не соответствует. Соберите все соответствующие ключи в некоторую структуру буфера. Бинго, у вас есть свой ответ.
  2. Изменение структуры данных на дерево. Либо
    1. простое двоичное дерево - все ваши ключи отсортированы автоматически. Сначала перемещайте дерево по глубине. Пока вы не найдете ключ, который не соответствует.
    2. причудливые структуры trie. Таким образом, вы получите все ключи отсортированы автоматически, и вы получите значительное повышение производительности благодаря эффективному хранению. Отдых одинаково, перемещайте дерево, собирайте соответствующие ключи.
Смежные вопросы