2013-03-02 4 views
3

У меня есть языковой словарь (например, английский, итальянский и т. Д.), Который по существу является файлом с одним словом в каждой строке.Java: Проверьте, есть ли строка в словаре

Теперь я хочу создать класс с методом, который задал строку во входной проверке, существует ли эта строка в этом словаре.

Моя идея заключается в том, что метод возвращает логическое значение. В псевдокоде:

boolean checkWord(String s){ 
    if(StringIsInDictionary) return true; 
    return false 
} 

Каким должен быть наилучший способ реализации этой функции?

Учтите, что файл будет содержать ~ 65000 слов.

+0

Оли, на самом деле, я ничего не пробовал. – Ivan

ответ

7

Прочитайте словарь в Set<String> (например, HashSet<String>), а затем используйте set.contains(word).

+0

И рассмотрим использование конструктора 'HashSet', который принимает параметр' initialCapacity'. http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#HashSet(int) –

+0

Является ли он эффективным и для смартфонов? – Ivan

1

Возможно, вы не захотите хранить слова как одно слово в строке. Лучшим подходом может быть чтение файла с диска только один раз, сохранение слов в HashSet (набор, поддерживаемый HashMap, который очень эффективен для поиска), а затем использовать set.contains("mystring"). Это, однако, потребует, чтобы вся карта была в памяти, но она будет очень эффективной, когда вам нужно будет проверить несколько слов.

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

2

Для решения проблемы пространства и времени (например, вы можете использовать на смартфоне), рассмотрите bloom filter. Тогда вам не нужно будет хранить словарь на телефоне, и проверка того, что строка в словаре будет очень быстрой. Обратите внимание, что фильтр цветения может возвращать ложный позитив, но вы можете настроить его, чтобы уменьшить этот риск.

Существует несколько вариантов реализации цветных фильтров Java с открытым исходным кодом. Один здесь https://github.com/magnuss/java-bloomfilter.

+0

+1, фильтр Bloom оптимален для ситуаций, когда память и производительность ограничены. – Joni

Смежные вопросы