Сколько данных может хранить список максимум? - PullRequest
50 голосов
/ 22 сентября 2010

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

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

Ответы [ 8 ]

49 голосов
/ 22 сентября 2010

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

22 голосов
/ 22 сентября 2010

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

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

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

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

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

11 голосов
/ 22 сентября 2010

Сколько данных можно добавить в 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, поскольку он поддерживается обычным массивом.

9 голосов
/ 22 сентября 2010

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

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

5 голосов
/ 22 сентября 2010

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

2 голосов
/ 23 января 2014

Интерфейс, однако, определяет метод 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

0 голосов
/ 16 июля 2015

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

0 голосов
/ 22 сентября 2010

см. Код ниже Arraylist по умолчанию это 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);
          }
...