В моем приложении у меня есть около 50 Мб строк, которые имеют много общих частей.Я хотел бы уменьшить потребление памяти, используя Radix Trie (Patricia Tree), например.Коллекция Apache impl.
Цель состоит в том, чтобы сохранять ссылки на записи и получать полные строки, когда они необходимы:
val trie = PatriciaTrie()
val node1 = trie.put("Long string #1", null) // what's the method to add and return TrieEntry?
someObject1.setNode(node1)
val node2 = trie.put("Long string #2", null)
someObject2.setNode(node2)
val node3 = trie.put("Long string #3", null)
someObject3.setNode(node3)
Поэтому я ожидаю, что он будет храниться в памяти следующим образом:
root
\
"Long string #"
\"1"
\"2"
\"3"
Когда это необходимо, я смогу получить полную строку (в someObjectN):
val fullString = node.getKey(); // How can i do it?
Есть 2 вопроса:
КакМогу ли я положить строку в три и получить экземпляр TrieEntry
?Так как он реализует java.util.map
, put
метод возвращает значение:
public V put(final K key, final V value)
Как я могу получить полную строку из TrieEntry
instance?
Значения (полезная нагрузка на узел) в моем случае бесполезны, поскольку основная цель - просто сохранить память (без какой-либо полезной нагрузки).
Is Apache'sPatriciaTrie подходит для этого случая использования вообще?Есть мысли?