Вопрос

Я создал много объектов Geodata (имя, почтовый код, лат, LON). Теперь я хочу поместить их в коллекцию, чтобы найти различные записи позже.

Все должно произойти объективным/в памяти, поэтому не нужно быть необходимостью в реляционной базе данных.

Такой запрос выглядит как:

  • Найдите лат и пол по имени или, пожалуйста
  • Найти объекты между LAT1, LAT2 и LON1, LON2

Какая коллекция самая лучшая для такой «простой» данных Datastructure?

Какая сложность необходима для такого запроса? Может ли многопоточная чтение быть преимуществом? Если это так, какая коллекция используется в лучшем случае для безопасности потока?

Есть ли шанс написать такие запросы в базе данных Value =>?

Это было полезно?

Решение

Вы можете использовать база данных в памяти.

Это хорошо, так как реляционные базы данных хороши для подобных реляционных запросов .... :-)


Для домашнего производства чистая ява, вы можете использовать:

  1. Map, с именем как ключ
  2. Map, с PLZ как ключ
  3. List<List<"object">> с LAT для первого списка, LON для второго списка.
    Оба отсортированы, поэтому для каждого вы можете искать значение, используя бинарные поиска и эффективно вернуть интервал с subList.

Это составляет дублирование для ключей, но не для всех объектов, так как вы можете повторно использовать одни и те же объекты экземпляра во всех этих случаях.

Многопоточное приемлемо (если вам это нужно по другим причинам), но я сомневаюсь, что вам нужно представить его, чтобы улучшить производительность одного поиска. Упомянутые структуры данных должны дать правильные ответы менее чем за миллисекунду!

Безопасность потоков не является проблемой для этих структур данных, так как ваш вариант использования, кажется, только для чтения. Если вам нужно изменить «объекты» в некоторых случаях, то вы можете защитить только «объекты» сами, а не структуры данных, используемые для поиска.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top