Сколько данных может хранить список максимум?

Сколько данных можно добавить в java.util.List в Java по максимуму?

Есть ли какой-либо размер по умолчанию для ArrayList?

8 ответов

Решение

Это зависит от List реализация. Поскольку вы индексируете массивы с intс ArrayList не может держать больше, чем Integer.MAX_VALUE элементы. LinkedList не ограничен таким же образом, и может содержать любое количество элементов.

Это будет зависеть от реализации, но предел не определяется List интерфейс.

Интерфейс однако определяет size() метод, который возвращает int,

Возвращает количество элементов в этом списке. Если этот список содержит более Integer.MAX_VALUE элементы, возврат Integer.MAX_VALUE,

Итак, без ограничений, но после достижения Integer.MAX_VALUEповедение списка немного меняется

ArrayList (который помечен) поддерживается массивом, и ограничен размером массива - т.е. Integer.MAX_VALUE

Сколько данных можно добавить в java.util.List в Java по максимуму?

Это очень похоже на теоретический предел для количества ключей (объектов), которые могут быть сохранены в HashMap?

Документация java.util.List явно не задокументированы какие-либо ограничения на максимальное количество элементов. Документация List.toArray однако утверждает, что...

Вернуть массив, содержащий все элементы в этом списке в правильной последовательности (от первого до последнего элемента); будет трудно реализовать определенные методы, такие как

... так строго говоря, было бы невозможно добросовестно реализовать этот метод, если бы в списке было более 2 31 -1 = 2147483647 элементов, поскольку это самый большой возможный массив.

Некоторые утверждают, что документация size()...

Возвращает количество элементов в этом списке. Если этот список содержит более Integer.MAX_VALUE элементы, возврат Integer.MAX_VALUE,

... указывает на отсутствие верхнего предела, но это представление приводит к многочисленным несоответствиям. Смотрите этот отчет об ошибке.

Есть ли по умолчанию размер списка массивов?

Если вы имеете в виду ArrayList тогда я бы сказал, что размер по умолчанию равен 0. Однако емкость по умолчанию (количество элементов, которые вы можете вставить, не заставляя список перераспределять память) равна 10. См. документацию конструктора по умолчанию.

Предел размера ArrayList является Integer.MAX_VALUE так как он поддерживается обычным массивом.

java.util.List это интерфейс. Количество данных, которое может содержать список, зависит от конкретной реализации List, которую вы решите использовать.

Как правило, реализация List может содержать любое количество элементов (если вы используете индексированный список, он может быть ограничен Integer.MAX_VALUE или же Long.MAX_VALUE). Пока у вас не хватает памяти, список не становится "полным" или чем-то еще.

Столько, сколько позволит ваша доступная память. Там нет ограничения по размеру, кроме кучи.

Интерфейс однако определяет метод size(), который возвращает int.

Returns the number of elements in this list. If this list contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.

Таким образом, нет предела, но после достижения Integer.MAX_VALUE поведение списка немного меняется

ArrayList (который помечен) поддерживается массивом и ограничен размером массива - то есть Integer.MAX_VALUE

См. код ниже массива по умолчанию, это 10, когда вы создаете List l = new ArrayList();

   public class ArrayList<E> extends AbstractList<E> implements List<E>,
           Cloneable, Serializable, RandomAccess {

          private static final long serialVersionUID = 8683452581122892189L;

          private transient int firstIndex;

          private transient int lastIndex;

          private transient E[] array;

          /**
           * Constructs a new instance of {@code ArrayList} with ten capacity.
           */
          public ArrayList() {
              this(10);
          }

Нумерация элементов в массиве java должна начинаться с нуля. Это было, я думаю, у нас может быть доступ к Integer.MAX_VALUE+1 элементам.

Другие вопросы по тегам