(Есть несколько вопросов о распределенных по времени разреженных массивах, но я ищу эффективность памяти.)
Мне нужен эквивалент 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. Похоже, что его исходный код будет легко редактировать более общим, хотя я бы предпочел использовать бинарную зависимость, если она доступна.