Почему LinkedList не имеет initialCapacity в java?

Интересно, почему LinkedList не имеет initialCapacity.

Я знаю, когда использовать ArrayList и LinkedList.

Хорошая практика определения окончательного размера коллекции, например:

List<String> arraylist = new ArrayList<String>(5);

Для LinkedList например:

List<String> linkedlist = new LinkedList<String>(); // right way

но

List<String> arraylist = new LinkedList<String>(5); // compilation error

Может кто-нибудь распространить свет на этот вопрос?

[EDIT]

Кстати, я могу написать

List<String> arraylist = new ArrayList<String>(5);
List<String> linkedlist = new LinkedList<String>(arraylist);

Ответы

Ответ 1

LinkedList по своей природе не имеет "емкости", поскольку он не выделяет память элементам до того, как элементы будут добавлены в список. Каждый элемент в LinkedList содержит указатель на следующий в списке.

http://www.stoimen.com/blog/wp-content/uploads/2012/06/0.-Arrays-vs.-linked-list.png

Не было бы необходимости заранее выделять память в список, так как LinkedList не имеет емкости.

Ответ 2

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

Ответ 3

Почему LinkedList имеет начальную емкость?

ArrayList подкрепляется массивом, поэтому начальная емкость - это начальный размер массива. LinkedList не нуждается в этом.

Ответ 4

Зачем вам нужна емкость LinkedList? LinkedList не работает с массивами с фиксированным размером. Каждый LinkedListElement имеет указатель (ссылку!) На следующий элемент в списке. Который из-за этого можно добавить элемент в связанный список в постоянное время. Но дорого стоить случайный доступ к элементам в Списке. Вам нужно пройти через все Элементы в списке, пока не достигнете цели.

Ответ 5

Linkedlist не требует начального значения. Это основное отличие между массивом и связанным списком.

Массив

закончится где-нибудь. Но связанного списка нет. Связанный список не работает с граничными значениями.

Ответ 6

Когда вы объявляете массив, вы должны знать его размер, потому что указатели должны быть созданы в памяти. Связанный список не нуждается в этом, потому что нет необходимости в указателях на память, прежде чем какой-либо объект будет добавлен в список.

Связанный список определяется рекурсивно как: пустой список en, который указывает на пустой список

поэтому всякий раз, когда вы добавляете элемент, вы выделяете память (или, скорее, в Java, компилятор делает это) при создании элемента, а затем, когда вы добавляете его в список, теперь он указывает на список (или последний элемент в список указывает на это).

Поэтому вам не нужно объявлять начальный размер связанного списка, потому что связанный список всегда начинается с пустого списка, а когда добавляется элемент, он указывает на список.