Ответ 1
Я бы постарался с trove коллекциями, TIntObjectMap, который может работать для ваших целей.
(Есть несколько вопросов о распределенных по времени разреженных массивах, но я ищу эффективность памяти.)
Мне нужен эквивалент List<T>
или Map<Integer,T>
, который
ArrayList<T>
в случае, если большинство индексов не являются null
, то есть когда фактические данные не очень разрежены.null
.HashMap<Integer,T>
(так как это автоматически расшифровывает ключи и, вероятно, не использует тип скалярного ключа).Кто-нибудь знает о таком классе утилиты?
Я бы ожидал, что в коллекциях Commons будет один, но это не похоже.
Я столкнулся с org.apache.commons.math.util.OpenIntToFieldHashMap
, который выглядит почти правильно, за исключением типа значения FieldElement
, который кажется безвозмездным; Я просто хочу T extends Object
. Похоже, что его исходный код будет легко редактировать более общим, хотя я бы предпочел использовать бинарную зависимость, если она доступна.
Я бы постарался с trove коллекциями, TIntObjectMap, который может работать для ваших целей.
Я бы посмотрел на реализацию Android SparseArray для вдохновения. Вы можете просмотреть исходный код, загрузив исходный код AOSP здесь http://source.android.com/source/downloading.html
Я сохранил свой тестовый пример как jglick/inthashmap. Результаты:
HashMap size: 1017504
TIntObjectMap size: 853216
IntHashMap size: 846984
OpenIntObjectHashMap size: 760472
Я предлагаю вам использовать OpenIntObjectHashMap из библиотеки Colt. Ссылка