Как мне сопоставить строковые ключи со значениями в Java эффективным с точки зрения памяти способом?

Я ищу способ сохранить строка-> int сопоставление.HashMap - это, конечно, наиболее очевидное решение, но поскольку у меня ограничена память и мне нужно хранить 2 миллиона пар, ключи длиной 7 символов, мне нужно что-то, что эффективно с точки зрения памяти, скорость извлечения является второстепенным параметром.

В настоящее время я просматриваю строку:

List<Tuple<String, int>> list = new ArrayList<Tuple<String, int>>();
list.add(...); // load from file
Collections.sort(list);

, а затем для поиска:

Collections.binarySearch(list, key); // log(n), acceptable

Должен ли я, возможно, выбрать собственное дерево (каждый узел - один символ, каждый лист с результатом), или существует существующее коллекция, которая подходит к этому красиво? Строки практически последовательные (почтовые индексы Великобритании, они не сильно различаются), поэтому я ожидаю здесь хорошей экономии памяти.

39
задан Peter O. 13 October 2011 в 15:42
поделиться