Поиск/запросы в коллекциях (Java)
-
21-09-2019 - |
Вопрос
Я создал много объектов Geodata (имя, почтовый код, лат, LON). Теперь я хочу поместить их в коллекцию, чтобы найти различные записи позже.
Все должно произойти объективным/в памяти, поэтому не нужно быть необходимостью в реляционной базе данных.
Такой запрос выглядит как:
- Найдите лат и пол по имени или, пожалуйста
- Найти объекты между LAT1, LAT2 и LON1, LON2
Какая коллекция самая лучшая для такой «простой» данных Datastructure?
Какая сложность необходима для такого запроса? Может ли многопоточная чтение быть преимуществом? Если это так, какая коллекция используется в лучшем случае для безопасности потока?
Есть ли шанс написать такие запросы в базе данных Value =>?
Решение
Вы можете использовать база данных в памяти.
Это хорошо, так как реляционные базы данных хороши для подобных реляционных запросов .... :-)
Для домашнего производства чистая ява, вы можете использовать:
Map
, с именем как ключMap
, с PLZ как ключList<List<"object">>
с LAT для первого списка, LON для второго списка.
Оба отсортированы, поэтому для каждого вы можете искать значение, используя бинарные поиска и эффективно вернуть интервал сsubList
.
Это составляет дублирование для ключей, но не для всех объектов, так как вы можете повторно использовать одни и те же объекты экземпляра во всех этих случаях.
Многопоточное приемлемо (если вам это нужно по другим причинам), но я сомневаюсь, что вам нужно представить его, чтобы улучшить производительность одного поиска. Упомянутые структуры данных должны дать правильные ответы менее чем за миллисекунду!
Безопасность потоков не является проблемой для этих структур данных, так как ваш вариант использования, кажется, только для чтения. Если вам нужно изменить «объекты» в некоторых случаях, то вы можете защитить только «объекты» сами, а не структуры данных, используемые для поиска.