(Есть несколько вопросов о время эффективного разреженных массивов, но я ищу для эффективности использования памяти.)памяти эффективного разреженный массив в Java
мне нужен эквивалент List<T>
или Map<Integer,T>
, которые
- Может расти по требованию, просто устанавливая ключ, который больше, чем любой, с которым мы столкнулись раньше. (Может считаться, что ключи неотрицательны.)
- Является примерно такой же эффективной для памяти, как и
ArrayList<T>
, в случае, если большинство индексов не являютсяnull
, то есть когда фактические данные не очень разрежены. - Когда индексы разрежены, потребляет пространство, пропорциональное числу индексов не
null
. - Использует меньше памяти, чем
HashMap<Integer,T>
(так как это автоблокирует ключи и, вероятно, не использует тип скалярного ключа). - Может получить или установить элемент в амортизированном журнале (N), где N - количество записей: не обязательно должно быть линейное время, бинарный поиск будет приемлемым.
- Реализована в невирусной чистой Java-библиотеке с открытым исходным кодом (желательно в Maven Central).
Кто-нибудь знает о таком классе полезности?
Я бы ожидал, что коллекций Commons будет один, но это не похоже.
Я столкнулся с org.apache.commons.math.util.OpenIntToFieldHashMap
, который выглядит почти правильно, за исключением значения типа FieldElement
, который кажется безвозмездным; Я просто хочу T extends Object
. Похоже, что было бы легко изменить исходный код на более общий, хотя я бы предпочел использовать бинарную зависимость, если она доступна.
Это выглядит хорошо. Я попытался адаптировать 'OpenIntToFieldHashMap' к родовому типу значений, который, похоже, работал с работой ~ 10 минут, но он работает только немного лучше, чем' TIntObjectMap'. –