#java #kotlin #data-structures #jvm
#java #kotlin #структуры данных #jvm
Вопрос:
Я ищу библиотеку, реализующую разреженный многомерный массив для kotlin на jvm и js. В android.utils есть реализация разреженного массива, но можно ли ее использовать с JVM / JS? Или в основной библиотеке что-то есть, и я просто пропускаю это?
Комментарии:
1. Какие свойства вы ищете в этой реализации разреженного массива? Обычно хэш-карта делает свое дело. Вы хотите повысить эффективность работы с памятью за счет скорости?
2. он предназначен для обработки положения некоторых объектов в трехмерном пространстве — в основном [x] [y] [z] -> список элементов в заданной позиции.
3. Да, но мой вопрос о том, почему не вложенные хэш-карты? В реализации, на которую вы ссылались, перечислены некоторые преимущества / недостатки по сравнению с хэш-картами, поэтому мне было интересно, какие из них, в частности, вас заинтересовали. У вас может быть a
Map<Int, Map<Int, Map<Int, List<Item>>>>
, который в основном делал бы то, что вы ищете.4. возможно, какая-то драматическая чрезмерная разработка?
5. @Joffrey вложенные хэш-карты могут оказаться потребляющими гораздо больше памяти, чем не разреженный массив. В большинстве случаев более эффективным было бы создание выделенного типа ключа, содержащего три
int
значения, и использование одного плоскогоHashMap
.
Ответ №1:
Как насчет использования пространственного индекса, такого как квадратичные деревья, R-деревья, kd-деревья?
Я не знаю ни о какой библиотеке Kotlin, но если вы можете использовать Java, посмотрите на библиотеку индексов TinSpin. Особенно, если позиции являются целыми числами и / или уникальными, я могу предложить PH-дерево, которое по умолчанию имеет уникальные позиции, но также может использоваться как multimap (просто вставьте карту / список / набор в любую занятую позицию).
Отказ от ответственности: самореклама — я являюсь разработчиком TinSpin, а также PH-дерева.