2010-09-22 3 views

ответ

39

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

+7

Что бы вы имели размер(), get (int), set (int, E) и remove (int) для списков с более чем элементами Integer.MAX_VALUE? Из-за этих ограничений я бы подумал, что верхний предел элементов всегда будет Integer.MAX_VALUE, потому что тип индекса навязывается интерфейсом java.util.List. –

+12

[spec for 'size()'] (http://download.oracle.com/javase/1.5.0/docs/api/java/util/List.html#size%28%29) ясно говорит: * Возвращает количество элементов в этом списке.Если этот список содержит больше элементов 'Integer.MAX_VALUE', возвращает' Integer.MAX_VALUE'. * Операции индексирования не будут работать для элементов после индекса 'Integer.MAX_VALUE', но если реализация не полагается на индексирование (что' ArrayList' делает по необходимости), вы все равно можете перебирать список, добавлять к нему вещи (либо в хвосте, либо перед индексом Integer.MAX_VALUE), удалять элементы (опять же, не после 'Integer.MAX_VALUE') и т. д. – gustafc

+0

I этот вопрос неверен на экзамене (я сказал, что это правда), и, по вашему мнению, это справедливо только как LinkedList: 'ArrayList не может динамически изменять размер, если вы добавляете больше количества элементов, чем его емкость. '. Правильно ли тогда, и экзамен был неправильным? (это был экзамен ucertify.com) – djangofan

4

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

18

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

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

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

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

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

+0

@Bozho, вы уверены, я не думаю, что это так .. если это так, тогда int может также содержать -ve значение –

+0

Я думаю, что это неправильно. Или иначе почему 'Collection # size()' say: _If эта коллекция содержит больше, чем Integer.MAX_VALUE, возвращает Integer.MAX_VALUE._ Это зависит от конкретной реализации. – musiKk

+0

@musiKk, @ org.life.java - вы правы, исправили его. – Bozho

9

java.util.List - это интерфейс. Сколько данных может хранить список, зависит от конкретной реализации списка, который вы выбрали для использования.

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

+0

Согласно документам, элементы должны вписываться в массив (см. Метод toArray). – aioobe

10

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

Это очень похоже на Theoretical limit for number of keys (objects) that can be stored in a HashMap?

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

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

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

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

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

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

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

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

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

0

см. Код ниже arraylist по умолчанию - 10 при создании u Список l = новый 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); 
      } 
+0

И если вы попытаетесь добавить одиннадцатый элемент, что произойдет? (Подсказка: он преуспевает.) Ваш ответ «правильный», так как вы вырезали и вставляли это из источника, но это подразумевает максимум 10 элементов, что неверно. – duffymo

+0

@duffymo Я пытался сказать, когда и создаю ArrayList, как этот List l = new ArrayList(); размер по умолчанию - десять. –

+3

Я знаю, но об этом не спрашивают. Это связано с максимальным допустимым размером массива, а не с начальным размером. Увидеть разницу? – duffymo

1

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

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

+1

это ваша мысль, но это не дискуссия. ответ должен быть основан на ясном представлении и доказательстве. – manetsus

Смежные вопросы