Я предполагаю, что количество букв для поиска не является фиксированным.То есть сегодня вы можете искать все фамилии, начинающиеся с «Джон», но завтра вы можете искать «Джох» или «Джонб».
Если это так, хэш-карта не будет работать, потому чтоне содержит понятия префикса.Вы хэшируете полное значение ключа, и только потому, что Джон
Если вы загружаете список один раз, а затем удерживаете его, и он не меняется, я думаю, что наиболее практичным решением будет создание объекта для каждого имени, затемсоздать массив указателей на эти объекты и отсортировать массив по фамилии.Затем используйте Arrays.binarySearch, чтобы найти первую запись с заданным префиксом и цикл, пока не найдете последнюю.
Если список очень динамичный, моей первой мыслью было бы создать связанный список и создать набор«указатели указателя» на выбранные точки в связанном списке, такие как первый A, первый B и т. д. Последовательный поиск оттуда.
Если список является одновременно динамическим и слишком большим для «вкладки индекса»подход к работе, тогда я думаю, что вы на практике выберете либо сохранить ее в базе данных и использовать возможности извлечения индекса из базы данных, либо проделать целую кучу работы, чтобы написать полную схему индексации в памяти.Честно говоря, это звучит как слишком много работы для меня.(Возможно, для этого есть какой-то пакет с открытым исходным кодом, который вы могли бы просто взять.) Если вы действительно поддерживаете большие объемы данных в памяти, а не в базе данных, возможно, вам следует спросить себя, почему.Для этого и нужны базы данных.