Эта статья в основном изучает содержимое содержимого Java Arraylist.
Прежде всего, нам нужно знать, что сущность ArrayList на самом деле является массивом типа объекта. Проблема расширения ArrayList на самом деле является проблемой расширения этого массива объекта.
переходной объект [] elementData;
Есть три ситуации для создания ArrayList
ArrayList al = new ArrayList ();
После завершения создания емкость AL равна 0. Вы можете знать из следующего кода.
переходной объект [] elementData; Приватный статический конечный объект [] defaultCapacity_empty_elementData = {}; public arraylist () {this.elementData = defaultCapacity_empty_elementData;}ArrayList al = new ArrayList (5);
Создание объекта ArrayList с емкостью 5 на самом деле является массивом объектов с длиной 5. Вы можете знать из следующего кода.
переходной объект [] elementData; Частный статический конечный объект [] defaultcapacity_empty_elementData = {}; public ArrayList (int initialCapacity) {if (initialCapacity> 0) {this.elementData = new Object [initialCapacity]; } else if (initialCapacity == 0) {this.ElementData = empty_elementData; } else {бросить new allogalargumentException ("Незаконная способность:"+ initialCapacity); }}ArrayList al = new ArrayList <Integer> (Arrays.aslist (1, 2, 3, 4, 5));
Объект ArrayList создается выше и инициализируется с использованием списка как [1,2,3,4,5]. На самом деле, он создает массив объектов длины 5, а содержание массива составляет [1, 2, 3, 4, 5]. Вы можете знать из следующего кода.
private int size; переходной объект [] elementdata; Частный статический конечный объект [] defaultcapacity_empty_elementData = {}; public ArrayList (Collection <? Extends E> C) {elementData = c.ToArray (); if ((size = elementdata.length)! = 0) {// c.toarray может (неправильно) не возвращать объект [] (см. 6260652) if (elementdata.getClass ()! = Object []. Class) elementData = arrays.copyof (elementData, size, object []. Class); } else {// заменить пустым массивом. this.elementData = empty_elementData; }} ArrayList <Integer> collection = new ArrayList <Integer> (Arrays.aslist (1, 2, 3, 4, 5)); integer [] moreints = {6, 7, 8, 9, 10}; collection.addall (Arrays.aslist (moreints)); 1. Создайте ArrayList с размером 5, с содержанием [1, 2, 3, 4, 5]. - Начальная емкость - 5
2. Добавьте SET {6, 7, 8, 9, 10} в этот объект ArrayList. ―-
public boolean addall (collection <? Extends e> c) {// Получить объект массива вставки [] a = c.toarray (); // Получить длину содержания вставки int numnew = a.length; evurecapacity (size + numnew); // urmention modcoutsystem. arraycopy (a, 0, elementdata, size, size Zize); 0. {modcount ++; // Дополнительное рассчитайте расширенный размер mincapacityif (mincapacity - elementdata.length> 0) выращивать (mincapacity);} private void grow (int mincapacity) {// Оригинальный размер ArrameList int oldCapacity = elementData. OldCapacity + (OldCapacity >> 1); // Сравнение с ранее рассчитанной длиной расширения MinCapacity, возьмите более крупную длину расширения, если (NewCapacity - MinCapacity <0) NewCapacity = MinCapacity; // Если расширение длины больше, чем максимальная длина, если (newCapacity -Max_Size> 0) newCapacity = 0) 0) 0) newCapacity = 0) newCapacity = 0) 0) 0) newCapacity = 0) 0) 0) 0) newCapacity = newCapacity = 0) newCapacity = 0) 0) newCapacity = 0). Hugecapacity (mincapacity); // Расширение elementData = arrays.copyof (elementdata, newcapacity);} private static int hugecapacity (int mincapacity) {// mincapacity меньше 0, что указывает на переполнение, в противном случае максимальный интехер используется в качестве окончательного расширения, если (mincapacity <0)// overflow waverththrow используется в качестве окончательного расширения, если (mincapacity <0)// overflow OutofmemoryError (); return (mincapacity> max_array_size)? Integer.max_value: max_array_size;} 1. Оригинальный размер ArrayList + размер коллекции, который будет вставлен numnew = Получить минимальную длину расширенной ArrayList MinCapacity
2. Если исходный размер ArrayList равен 0, то есть ArrayList пуст, минимальная длина массива после расширения mincapacity = math.max (10, mincapacity), то есть минимальная длина расширения Mincapacity - это не только исходный размер длины, плюс численность длины установленного набора.
3. Расширенная минимальная длина, полученная выше, не является конечной расширенной длиной, и необходим дальнейший расчет.
(1) Получить исходный размер ArrayList OldCapacity
(2) получить новый расширенный размер: newCapacity = OldCapacity*1,5;
(3) Сравните расширенную минимальную длину, рассчитанную выше, с расширенным размером Newcapacity, полученной здесь, и примите более крупный в качестве окончательного расширенного размера.
Выше приведено подробное объяснение примера расширения ArrayList. В этой статье я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!