Является ли создание массива и списка массивов одним и тем же в Java? - PullRequest
1 голос
/ 10 августа 2011

Является ли создание массива и создание массива 1004 * одним и тем же в Java?Я слышал много разных историй по этому поводу, так что, если бы вы могли указать мне правильное направление, это было бы очень ценно:)

Ответы [ 4 ]

5 голосов
/ 10 августа 2011

Массив является примитивной структурой. Это последовательная память, выделенная JVM.

Arraylist использует массив позади него, но у вас нет прямого доступа к нему. Он может «расти», а обычный массив - нет.

По сути, arraylist начинается (по умолчанию) с массива длиной 10 и счетчиком 0. Итак, представьте, что у вас

ArrayList<Integer> myInts = new ArrayList<Integer>();

за этим стоит массив, подобный этому

count = 0
array = [ null, null, null, null, null, null, null, null, null, null ]

Когда вы идете myInts.add(5); это делает

count = 1
array = [ 5, null, null, null, null, null, null, null, null, null ]

Если бы вы добавили больше, вы могли бы получить это

count = 10
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1 ]

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

count = 11
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1, 9, null, null, null, null, null, null, null, null, null ]

Вы можете изменить размер резервного массива, если хотите. например:

myInts.trimToSize();

count = 11 // hasn't changed
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1, 9]

myInts.ensureCapacity(15);

count = 11 // hasn't changed
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1, 9, null, null, null, null,]
1 голос
/ 10 августа 2011

Вы можете иметь массив типов примитивов, в то время как ArrayList не поддерживает типы примитивов.

Вы можете сэкономить часть памяти, если вы используете Array вместо ArrayList, но не будете иметь дополнительные функции, предоставляемыеJava Collection Framework.

0 голосов
/ 10 августа 2011

Нет, это не одно и то же.

Поддержка реальных массивов является частью языка Java и виртуальной машины Java. В наборе команд JVM есть конкретные инструкции для работы с массивами.

ArrayList - это просто класс, который является частью основных библиотек Java. Внутренне он хранит элементы в массиве Java. Сравните это с другими реализациями списка, такими как LinkedList.

На практике реализация List, такая как ArrayList, предлагает больше возможностей, чем массив. Например, ArrayList может иметь различный размер и будет перераспределять базовый массив, если потребуется больше места.

0 голосов
/ 10 августа 2011

Проще говоря, массив не может расти там, где может ArrayList. Вы можете даже уменьшить или очистить ArrayList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...