У меня есть огромный список массива, который содержит 1 000 записей, из которых одна из записи является "миром". И, я перебрасываюсь парой слов "большой мир". Я хочу получить слово "большой мир", соответствовавший "миру" в arraylist.
Каков самый экономически эффективный способ сделать его? Я не могу использовать .contains метод списка массива, и Если я пересекаю все эти 1 000 записей и соответствую им шаблоном его попытка быть очень дорогостоящим с точки зрения производительности. Я использую Java для этого.
Вы могли сообщить мне то, что лучший способ для этого?
С наилучшими пожеланиями, J
Вы можете разбить каждый отдельный элемент ArrayList
на слова и остановиться, как только найдете одно из них.
Я полагаю, по вашему профилю, который вы разрабатываете на Java, с Lucene вы бы легко сделали что-то подобное
public class NodesAnalyzer extends Analyzer {
public TokenStream tokenStream(String fieldName, Reader reader) {
Tokenizer tokenizer = new StandardTokenizer(reader)
TokenFilter lowerCaseFilter = new LowerCaseFilter(tokenizer)
TokenFilter stopFilter = new StopFilter(lowerCaseFilter, Data.stopWords.collect{ it.text } as String[])
SnowballFilter snowballFilter = new SnowballFilter(stopFilter, new org.tartarus.snowball.ext.ItalianStemmer())
return snowballFilter
}
}
Analyzer analyzer = new NodesAnalyzer()
TokenStream ts = analyzer.tokenStream(null, new StringReader(str));
Token token = ts.next()
while (token != null) {
String cur = token.term()
token = ts.next();
}
Примечание: это Groovy-код, который я скопировал из личного проекта, поэтому вам придется переводить такие вещи, как Data .stopWords.collect {it.text} как String []
для использования с простой Java
Предполагая, что вы не знаете содержимое элементов списка массивов, вам придется обойти весь список массивов.
Обход списка массивов обойдется вам в O(n).
Сортировка списка массивов вам не поможет, потому что вы говорите о поиске строки в наборе строк. и все равно сортировка будет дороже. O(nlogn)
Если вам необходимо многократно выполнять поиск в списке, имеет смысл использовать методы sort ()
и binarySearch ()
из Collections
.
Приложение: Как отмечает @ user177883, стоимость сортировки O (n log n) должна быть сопоставлена с выгодой последующих поисков O (log n) .
Слово «сердце» соответствует [слову] «ухо».
Поскольку точного совпадения недостаточно, этот подход будет неадекватным.