Кажется, я не могу найти Java List
, максимальная длина которого равна максимальному значению long
.
Существует ли такой List
?
Если да, то где?
Кажется, я не могу найти Java List
, максимальная длина которого равна максимальному значению long
.
Существует ли такой List
?
Если да, то где?
Как говорит @afsantos, класс ArrayList
по своей сути ограничен Integer.MAX_VALUE
записями из-за ограничений массивов Java.
LinkedList
не имеет этого ограничения, но (тем не менее) дорого:
Каждая запись влечет за собой накладные расходы памяти на 2 ссылки плюс размер заголовка объекта... по сравнению с одной ссылкой для представления на основе массива.
Индексирование — это операция O(N)
по сравнению с O(1)
для списка на основе массива.
Вот ссылка на библиотеку Java, которая поддерживает огромные коллекции в памяти с использованием памяти с прямым отображением и/или кодирования элементов:
Там могут быть и другие альтернативы.
Можно также предусмотреть «большой» вариант обычных списков массивов, в котором используется массив массивов, а не один массив. Но если вы разрешите вставку в середину списка, становится сложно/дорого добиться поиска O(1)
. (Возможно, поэтому я не смог найти пример с Google...)
Из документации List
:
int size()
Возвращает количество элементов в этом списке. Если этот список содержит более
Integer.MAX_VALUE
элементов, возвращаетсяInteger.MAX_VALUE
.
Таким образом, даже если конкретная реализация List
содержит Long.MAX_VALUE
элементов, вы не узнаете об этом, используя стандартный интерфейс List
.
Я не уверен, существует ли он, но я бы сделал ставку на LinkedList
, поскольку ArrayList
основан на массивах, а они не могут содержать более Integer.MAX_VALUE
элементов.
LinkedList
похоже ограничен только памятью.
- person ; 27.01.2014
Поскольку List.get(int)
принимает int в качестве аргумента, невозможно адресовать записи с индексами больше Integer.MAX_VALUE
.
Однако обратите внимание, что Iterable<?>
или Map<Long, ?>
могут обращаться к гораздо большему количеству данных. Поскольку List реализует Iterable, он может содержать любое количество данных (эта часть не отображается с помощью API List на основе int).
List
не нужно хранить в памяти? - person   schedule 27.01.2014