System.collections.arraylist Class - это специальный массив. Добавляя и удаляя элементы, длина массива может быть изменена динамически.
один. преимущество
1. Поддерживает функцию автоматического изменения размера
2. Гибкая вставка элементов
3. Гибкая удаление элементов
два. ограничение
По сравнению с обычными массивами, скорость немного хуже
три. Добавить элементы
1. publicvirtualIntAdd (ObjectValue);
Добавить объект в конце ArrayList
ArrayList alist = new ArrayList (); Alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e");Содержание есть
Abcde
2. publicvirtualvoidinsert (Intindex, ObjectValue);
Вставьте элемент в указанный индекс ArrayList
ArrayList alist = new ArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.insert (0, "aa");Результат
aaabcde
3. publicVirtualVoidInserTrange (IntindEx, iCollectionC);
Вставьте элемент в коллекцию в указанный индекс ArrayList
ArrayList alist = new ArrayList (); Alist.Add («a»); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); arraylist list2 = newarraylist (); list2.add ("tt"); list2.Add (ttt ');Результат
abtttttcde
Четыре удалить
1. publicvirtualvoidRemove (ObjectObj);
Удалите первое соответствие конкретного объекта из ArrayList, обратите внимание, что это первое
ArrayList alist = new ArrayList (); Alist.Add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.remove ("a");Результат
BCDE
2. publicvirtualvoidRemoveat (Intindex);
Удаляет элементы в указанном индексе ArrayList
alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.removeat (0);Результат
BCDE
3. publicvirtualvoidRemoverange (Intindex, Intcount);
Удаляет ряд элементов из ArrayList. Индекс представляет индекс, количество представляет число, начиная с индекса
alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.removerange (1,3);Результат
Скопируйте код следующим образом: AE
4. publicVirtualVoidClear ();
Удалите все элементы из ArrayList.
пять. Сортировка
1. PublicVirtualVoidSort ();
Сортировать элементы в Arraylist или его часть.
ArrayListalst = newarrayList (); alist.add ("e"); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); dropdownlist1.datasource = alist; // dopdownlidpdowdlist1; dropdownlist1Результат
EABCD
Arraylist = newarraylist (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.sort (); // sorting dropdownlist1.datasource = alistdlist1tlidlist1;Результат
Abcde
2. PublicVirtualVoidReverse ();
Отправляет порядок элементов в массиве или его части.
ArrayListAlist = newarrayList (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.reverse (); // reampdowdList1.datasource = alistdlislidlist1;Результат
Edcba
шесть. Находить
1. Publicvirtualintindexof (Object);
2. Publicvirtualintindexof (Object, int);
3. PublicVirtualIntIndexof (Object, Int, Int);
Возвращает нулевой индекс первого матча ArrayList или его части. Возврат -1 не найден.
ArrayList alist = new ArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("D"); alist.add ("e"); intnindex = alist.indexof ("a"); // 1 nindex = alist.indexof ("p"); // не найден, -1 4. PublicVirtualIntlastIndexof (Object);
5. PublicVirtualIntlastIndexof (Object, int);
6. publicvirtualintlastindexof (Object, int, int);
Возвращает нулевой индекс последнего матча ArrayList или его части.
ArrayList alist = new ArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("a"); // так же, как 0 alist.add ("d"); alist.add ("e"); Intnindex = alist.lastindexof ("a"); // Значение 2 вместо 0 7. Publicvirtualboolcontains (ObjectItem);
Определяет, находится ли элемент в массиве. Вернуть True, если включена, в противном случае вернуть ложь
Семь. другой
1. publicvirtualitcapacity {get; set;}
Получает или устанавливает количество элементов, которые может содержать ArrayList.
2. publicvirtualintcount {get;}
Получает количество элементов, фактически содержащихся в ArrayList.
Емкость - это количество элементов, которые может хранить ArrayList. Подсчет - это количество элементов, фактически содержащихся в ArrayList. Емкость всегда больше или равна подсчету. Если подсчет превышает емкость при добавлении элемента, емкость списка удваивается путем автоматического перераспределения внутреннего массива.
Если значение емкости явно установлено, внутренний массив также должен быть переназначен для размещения указанной емкости. Если емкость явно устанавливается на 0, то время выполнения общего языка устанавливает ее на свой способности по умолчанию. Емкость по умолчанию составляет 16.
После вызова Core, счет равен 0, а в этот момент отключение емкости - это емкость по умолчанию 16, а не 0
3. publicvirtualvoidtrimtosize ();
Установите емкость на фактическое количество элементов в ArrayList.
Если вы не добавляете новые элементы в список, этот метод можно использовать для минимизации накладных расходов системы памяти списка.
Чтобы полностью очистить все элементы в списке, вызовите метод CLEAR, прежде чем вызовать TrimtoSize. Отключение пустого массива установит емкость ArrayList на емкость по умолчанию, а не ноль.
ArrayList alist = new ArrayList (); Alist.Add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); // count = 5, емкость = 16, alist.trimtosize (); // count = 5; 8. Анализ исходного кода
Класс реализации интерфейса списка, внутренне использует массив для хранения значений элементов, что эквивалентно массиву размера переменной.
1. Подпись
Общедоступный класс ArrayList <e> расширяет AbstractList <e> List <e>, случайный, клонируемый, сериализуемый
Вы можете видеть, что ArrayList наследует класс AbstractList Abstract, который реализует большинство методов интерфейса списка. Если вы хотите внедрить неизменную список, просто наследуйте этот класс и реализуйте методы GET (Int) и размера. Если вы хотите внедрить измененный список, вам необходимо переопределить Set (int, e). Кроме того, если размер списка является переменным, методы add (int, e) и rement () также должны быть переопределены.
2. Конструктор
ArrayList предоставляет три конструктора:
ArrayList () ArrayList (Collection <? Extends E> C) ArrayList (int initialCapacity)
Конвенция о интерфейсе сбора, согласно которому каждый класс сбора должен предоставить два «стандартных» конструктора, один из них является конструктором без параметров (первый выше), а другой - конструктор с одним параметром (второй выше). ArrayList также предоставляет третий конструктор, который принимает значение int, чтобы установить начальный размер Arrayli (размер по умолчанию составляет 10).
3. Связанные методы
trimtosizepublic void trimtosize () {modcount ++; int oldCapacity = elementData.length; if (size <oldCapacity) {elementData = arrays.copyof (elementData, size); }}Используется для снижения емкости ArrayList до его текущего фактического размера и уменьшить емкость хранения. Переменная Modcount унаследована от AbstractList, записывая количество раз, когда список структурно модифицируется. Элемент ArrayList фактически хранится в ElementData, который объявляется как: частный переходный объект [] elementData; Размер переменной - это количество элементов ArrayList. Когда размер <OldCapency, вызовите метод Arrays.copyof для достижения сокращения.
4. indexof и lasindexof
public int indexof (объект o) {if (o == null) {for (int i = 0; i <size; i ++) if (elementdata [i] == null) return i; } else {for (int i = 0; i <size; i ++) if (o.equals (elementdata [i])) return i; } return -1; }Эти два метода возвращают подписку указанного элемента, и мы хотим различить, является ли параметр нулевым. LastIndexof похож на индекс, но ищет сзади на фронт.
5. EnceRecapacity
public void EnsureCapacity (int mincapacity) {if (mincapacity> 0) evureCapacityEnternal (mincapacity); } private void EnsureCapacityInternal (int mincapacity) {modcount ++; // переполненный код if (mincapacity - elementdata.length> 0) растут (mincapacity); } private void Grow (int mincapacity) {// переполнение кода int oldCapacity = elementData.length; int newCapacity = OldCapacity + (OldCapacity >> 1); if (newcapacity - mincapacity <0) newcapacity = mincapacity; if (newcapacity - max_array_size> 0) newcapacity = gugecapacity (mincapacity); // mincapacity обычно близка к размеру, так что это победа: elementData = arrays.copyof (elementdata, newcapacity); }Этот метод обеспечивает размер ArrayList
6. Адд и аддаль
public void add (int index, e element) {rangeCheckforadd (index); EnceRecapacityInternal (размер + 1); // Приращивание ModCount !! System.ArrayCopy (ElementData, Index, ElementData, Index + 1, Size - Index); elementData [index] = element; размер ++; } Добавить (int index, e -элемент), чтобы добавить элемент в указанную позицию. Во -первых, позвоните в Rangecheckforadd, чтобы проверить, является ли индекс действительным. Если индекс> размер || Индекс <0, будет брошено исключение. Затем убедитесь, что емкость увеличивается на 1, и вызовите систему. Наконец, установите значение в индексе на добавленный элемент. Существует также перегруженный метод добавления (e E), который напрямую добавляет элемент к концу.
Addall (Collection <? Extends E> C) и Addall (Int Index, Collection <? Extends E> C) Добавьте все элементы в коллекцию в конце и указанные позиции соответственно.
7. СДЕЛАЙТЕ И ПЕРЕМЕЩЕНИЕ
public boolean remove (object o) {if (o == null) {for (int index = 0; index <size; index ++) if (elementdata [index] == null) {fastremove (index); вернуть истину; }} else {for (int index = 0; index <size; index ++) if (o.equals (elementdata [index])) {fastremove (index); вернуть истину; }} вернуть false; }Метод удаления (объект o) удаляет указанный элемент. Сначала ищите местоположение элемента, а затем позвоните Fastremove (Index), чтобы удалить его. Код заключается в следующем:
private void fastremove (int index) {modcount ++; int nummoved = size - index - 1; if (nummoved> 0) // Перемещение всех элементов за индекс+1 One Position Worth System.ArrayCopy (elementData, index+1, elementData, index, Nummoved); elementData [-size] = null; // Пусть GC сделает свою работу} Метод перегруженного удаления (int index) используется для удаления элементов в указанном месте. Removerange (int fromindex, int toindex) используется для удаления всех элементов между указанными местоположениями.
Removeall (collection <?> C) и коды retainall (collection <?> C) следующие:
public boolean removeall (collection <?> c) {objects.requirenonnull (c); вернуть BatchRemove (c, false); } public boolean antainall (collection <?> c) {objects.requirenonnull (c); вернуть BatchRemove (c, true); }Все они реализованы путем вызова метода BatchRemove, и их код заключается в следующем:
Private Boolean BatchRemove (Collection <?> C, логический комплемент) {Final Object [] elementData = this.elementData; int r = 0, w = 0; логический модифицированный = false; try {for (; r <size; r ++) if (c.contains (elementdata [r]) == комплемент) elementdata [w ++] = elementdata [r]; } наконец {// Сохраняет поведенческую совместимость с AbstractCollection, // даже если C.Contains () бросает. if (r! = size) {System.ArrayCopy (elementData, r, elementData, w, size - r); w += size - r; } if (w! = size) {// ясно, чтобы GC выполнял свою работу для (int i = w; i <size; i ++) elementdata [i] = null; modcount += size - w; размер = w; модифицированный = true; }} return modified; }Этот метод имеет два параметра. Первый - это коллекция операций, а вторая - логическое значение. Установив его на TRUE или FALSE, он выбирает, следует ли удалить или удерживать. Заявление в Try ставит оставшиеся между 0 и w, а затем, наконец, второе, если в конце концов обрабатывает пространство после W, и первый выполняется, когда C.Contains () бросает исключение.