Нахождение свободного соответствия для строки в arraylist

У меня есть огромный список массива, который содержит 1 000 записей, из которых одна из записи является "миром". И, я перебрасываюсь парой слов "большой мир". Я хочу получить слово "большой мир", соответствовавший "миру" в arraylist.

Каков самый экономически эффективный способ сделать его? Я не могу использовать .contains метод списка массива, и Если я пересекаю все эти 1 000 записей и соответствую им шаблоном его попытка быть очень дорогостоящим с точки зрения производительности. Я использую Java для этого.

Вы могли сообщить мне то, что лучший способ для этого?

С наилучшими пожеланиями, J

1
задан Abhishek 28 June 2010 в 16:03
поделиться

3 ответа

Вы можете разбить каждый отдельный элемент 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

1
ответ дан 2 September 2019 в 23:27
поделиться

Предполагая, что вы не знаете содержимое элементов списка массивов, вам придется обойти весь список массивов.

Обход списка массивов обойдется вам в O(n).

Сортировка списка массивов вам не поможет, потому что вы говорите о поиске строки в наборе строк. и все равно сортировка будет дороже. O(nlogn)

1
ответ дан 2 September 2019 в 23:27
поделиться

Если вам необходимо многократно выполнять поиск в списке, имеет смысл использовать методы sort () и binarySearch () из Collections .

Приложение: Как отмечает @ user177883, стоимость сортировки O (n log n) должна быть сопоставлена ​​с выгодой последующих поисков O (log n) .

Слово «сердце» соответствует [слову] «ухо».

Поскольку точного совпадения недостаточно, этот подход будет неадекватным.

0
ответ дан 2 September 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: