Хотя HashSet является вполне приемлемым решением (см. Ответ Божо), существуют и другие структуры данных, которые можно использовать, включая Trie или Heap.
Преимущество Trie Имеется в том, что в зависимости от деталей реализации , начальные префиксные буквы могут быть разделены (в конце концов, дерево также называется «префиксным деревом»).В зависимости от структуры реализации и данных, это может или не может быть улучшением.
Другой вариант, особенно если требуется файловый доступ, заключается в использовании Heap - PriorityQueue Javaна самом деле это куча, но она не основана на файлах, поэтому для этого потребуется найти / сделать реализацию.
Все эти структуры данных (и более) могут быть реализованы на основе файлов (используйте большеIO за поиск - который на самом деле может быть менее общим - но сэкономить память) или реализован напрямую (например, использовать SQLite и позволить ему делать это в B-Tree).SQLite выделяется тем, что он может быть «обычным инструментом» (когда-то часто используемым ;-) в наборе инструментов;Импорт, проверка и модификация данных просты, и «это просто работает».SQLite даже используется в менее мощных системах, таких как Android.
HashSet поставляется "бесплатно" с Java, но нет стандартной реализации Trie или Heap на основе файлов.Я бы начал с HashSet - Reasoning:
- Dictionary = 5MB.
- Загружен в HashSet (при условии больших накладных расходов) = 20MB.
- Использование памяти в отношениина другие вещи = минимальный (предполагается, ноутбук / рабочий стол)
- Время для реализации с HashSet = 2 минуты.
- Я потерял только 2 минуты, если я решу, что HashSet не был хорошдостаточно: -)
Счастливое кодирование.
Ссылки на случайные реализации структуры данных (могут или не могут быть подходящими):
- TernarySearchTrie Считывает в плоский файл (должен быть специально создан?)
- TrieTree Поддерживает создание файла Trie из плоского файла.Не уверен, что эта Trie работает с диска.
- FileHash Хеш, который использует поддержку файла.
- HashStore Другой дисковый хеш
- WB B-Tree Простая реализация B-дерева / «база данных»
- SQLite Небольшие встроенные СУБД.
- UTF8String Может использоваться для значительного сокращенияТребования к памяти при использовании
HashSet<String>
при использовании латинского словаря.(Строка в Java использует кодировку UTF-16, которая составляет минимум два байта / символ.)