La clase System.Collections.ArrayList es una matriz especial. Al agregar y eliminar elementos, la longitud de la matriz se puede cambiar dinámicamente.
uno. ventaja
1. Admite la función de cambio de tamaño automático
2. Inserción flexible de elementos
3. Deleción flexible de elementos
dos. limitación
En comparación con las matrices ordinarias, la velocidad es un poco peor
tres. Agregar elementos
1. PublicVirtualIntadd (ObjectValue);
Agregar objeto al final de ArrayList
ArrayList alist = new ArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e");El contenido es
abcde
2. PublicVirtualVoidInsert (IntIdex, ObjectValue);
Insertar elemento en el índice especificado de ArrayList
ArrayList alist = new ArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.insert (0, "aa");El resultado es
aaabcde
3.
Inserte un elemento en la colección en el índice especificado de 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"); alist.insertrange (2, list2);El resultado es
abtttttcde
Cuatro. borrar
1. PublicvirtualVoidremove (ObjectObj);
Elimine la primera coincidencia de un objeto específico de una lista de matrices, tenga en cuenta que es el primero
ArrayList alist = new ArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.remove ("a");El resultado es
BCDE
2. PublicvirtualVoidremoveat (Intindex);
Elimina elementos en el índice especificado de ArrayList
alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.removeat (0);El resultado es
BCDE
3.
Elimina una gama de elementos de la lista de matrices. El índice representa el índice, el recuento representa el número que comienza desde el índice
alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.removerange (1,3);El resultado es
Copie el código de la siguiente manera: AE
4. PublicVirtualVoidCLear ();
Elimine todos los elementos de ArrayList.
cinco. Clasificar
1.PublicVirtualVoidSort ();
Ordenar elementos en una lista de matrices o parte de ella.
ArrayListalist = newArrayList (); alist.add ("e"); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d") ;-townleist1.dataSource = alist; //-tropdownListList1; shotwdownlist1.databind ();)El resultado es
EABCD
ArrayListalist = newArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.sort (); // clasificando DropDownList1.DataSource = Alist; // DropDownListDroPdownList1; DropDownList1.databind ();El resultado es
abcde
2.PublicVirtualVoidReverse ();
Invierte el orden de elementos en una lista de matrices o parte de ella.
ArrayListalist = newArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); alist.revers (); // invertir DropDownList1.DataSource = Alist; // DropDownListDroPdownList1; DropDownList1.databind ();El resultado es
EDCBA
seis. Encontrar
1.PublicVirtualInTindexOf (objeto);
2.PublicVirtualInTindexOf (Object, int);
3.PublicVirtualInTindexOf (Object, int, int);
Devuelve el índice basado en cero de la primera coincidencia de una lista de matrices o parte de ella. No se encontró ningún retorno -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"); // no encontrado, -1 4.PublicVirtualIntlastIndexof (Object);
5.PublicVirtualIntlastIndexof (Object, int);
6.PublicVirtualIntlastIndexof (Object, int, int);
Devuelve el índice basado en cero del último partido de una lista de matrices o parte de ella.
ArrayList alist = new ArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("a"); // igual que 0 alist.add ("d"); alist.add ("e"); intnindex = alist.lastindexof ("a"); // El valor es 2 en lugar de 0 7.PublicVirtualBoolContains (Objectitem);
Determina si un elemento está en una lista de matrices. Devolver verdadero si se incluye, de lo contrario regresa falso
Siete. otro
1. PublicVirtualIntcapacity {get; set;}
Obtiene o establece el número de elementos que puede contener una ArrayList.
2. PublicVirtualIntCount {get;}
Obtiene el número de elementos realmente contenidos en la ArrayList.
La capacidad es el número de elementos que puede almacenar una ArrayList. El recuento es el número de elementos realmente contenidos en ArrayList. La capacidad siempre es mayor o igual al recuento. Si el recuento excede la capacidad al agregar un elemento, la capacidad de la lista se duplica al reasignar automáticamente la matriz interna.
Si el valor de capacidad se establece explícitamente, la matriz interna también debe reasignarse para acomodar la capacidad especificada. Si la capacidad se establece explícitamente en 0, el tiempo de ejecución del idioma común lo establece en su capacidad predeterminada. La capacidad predeterminada es 16.
Después de llamar claro, el recuento es 0, y en este momento la capacidad de corte es la capacidad predeterminada de 16, no 0
3. PublicVirtualVoidTrimtosize ();
Establezca la capacidad del número real de elementos en la lista de matrices.
Si no agrega nuevos elementos a la lista, este método se puede usar para minimizar la sobrecarga del sistema de memoria de la lista.
Para borrar completamente todos los elementos de la lista, llame al método Borrar antes de llamar a TRIMTOSIZE. Cortar una lista de matrices vacía establecerá la capacidad de ArrayList a la capacidad predeterminada, no cero.
ArrayList alist = new ArrayList (); alist.add ("a"); alist.add ("b"); alist.add ("c"); alist.add ("d"); alist.add ("e"); // count = 5, capacidad = 16, alist.trimtosize (); // count = capacidad = 5; 8. Análisis del código fuente
Una clase de implementación de la interfaz de la lista, utiliza internamente una matriz para almacenar valores de elementos, que es equivalente a una matriz de tamaño variable.
1. Firma
Public Class ArrayList <E> extiende AbstractList <E> Lista de implementos <E>, RandomAccess, clonable, serializable
Puede ver que ArrayList hereda la clase abstracta abstracta, que implementa la mayoría de los métodos de la interfaz de la lista. Si desea implementar una lista inmutable, solo herede esta clase e implementa los métodos Get (int) y de tamaño. Si desea implementar una lista mutable, debe anular SET (int, E). Además, si el tamaño de la lista es variable, los métodos ADD (int, e) y eliminar () también deben ser anulados.
2. Constructor
ArrayList proporciona tres constructores:
ArrayList () ArrayList (Collection <? Extends E> C) ArrayList (int InitialCapacity)
La convención de la interfaz de colección de que cada clase de recolección debe proporcionar dos constructores "estándar", uno es un constructor sin parámetros (el primero anterior), y el otro es un constructor con un solo parámetro (el segundo anterior). ArrayList también proporciona un tercer constructor que acepta un valor INT para establecer el tamaño inicial de Arrayli (el tamaño predeterminado es 10).
3. Métodos relacionados
TRIMTOSIZEZEPublic Void Trimtosize () {ModCount ++; int if (size <OldCapacity) {elementData = arrays.copyOf (elementData, size); }}Se utiliza para reducir la capacidad de ArrayList a su tamaño real actual y reducir la capacidad de almacenamiento. La variable ModCount se hereda de AbstractList, registrando el número de veces que la lista se modifica estructuralmente. El elemento de ArrayList en realidad se almacena en ElementData, que se declara como: objeto transitorio privado [] elementData; El tamaño de la variable es el número de elementos de ArrayList. Cuando tamaño <OldCapacity, llame al método de COPOFOF para lograr la reducción.
4.indexof y lasindexof
public int indexOf (objeto 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; }Estos dos métodos devuelven el subíndice del elemento especificado, y queremos distinguir si el parámetro es nulo. LastIndexof es similar a IndexOf, pero busca de detrás a frente.
5. Ensurecapacidad
public void setureCapacity (int mincapacity) {if (mincapacity> 0) ssurecapacityInternal (mincapacity); } private vacío ensaladointernal (int mincapacity) {modCount ++; // Código consciente de desbordamiento if (mincapacity - elementData.length> 0) Grow (mincapacity); } private void grow (int mincapacity) {// código de desbordamiento-consciente int OldCapacity = elementData.length; int newCapacity = OldCapacity + (OldCapacity >> 1); if (newCapacity - mincapacity <0) newCapacity = mincapacity; if (newCapacity - max_array_size> 0) newCapacity = HugeCapacity (mincapacity); // La mincapacidad generalmente está cerca del tamaño, por lo que esta es una victoria: elementData = arrays.copyOf (elementData, newCapacity); }Este método garantiza el tamaño de la lista de arrays
6.Add y addall
public void add (int index, e elemento) {rangecheckforadd (index); EnsurecapacityInternal (tamaño + 1); // incrementa modcount! System.ArrayCopy (ElementData, índice, elementData, índice + 1, tamaño - índice); elementData [index] = elemento; tamaño ++; } Agregar (índice int, elemento e) para agregar un elemento a la posición especificada. Primero, llame a RangecheckForadd para verificar si el índice es válido. Si índice> tamaño || índice <0, se lanzará una excepción. Luego asegúrese de que la capacidad aumente en 1 y llame al sistema. Finalmente, establezca el valor en el índice en el elemento agregado. También hay un método ADD (E E) sobrecargado que agrega directamente el elemento al final.
addall (colección <? extiende e> c) y addall (int index, colección <? extiende e> c) Agregue todos los elementos en la colección al final y las posiciones especificadas respectivamente.
7. retrasar y quitar
Public Boolean Remete (Object o) {if (o == null) {for (int index = 0; index <size; index ++) if (elementData [index] == null) {fastremove (index); devolver verdadero; }} else {for (int index = 0; index <size; index ++) if (o.equals (elementData [index])) {fastremove (index); devolver verdadero; }} return false; }El método eliminar (objeto o) elimina el elemento especificado. Primero, busque la ubicación del elemento y luego llame a Fastremove (índice) para eliminarla. El código es el siguiente:
privado void fastremove (int index) {modcount ++; int numMoved = tamaño - índice - 1; if (numMoved> 0) // Mueva todos los elementos detrás del índice+1 una posición hacia adelante System.ArrayCopy (ElementData, índice+1, elementData, index, nummoved); elementData [-size] = null; // deja que GC haga su trabajo} El método de eliminación sobrecargado (INT índice) se utiliza para eliminar elementos en la ubicación especificada. Removerange (int fromindex, int toindex) se usa para eliminar todos los elementos entre las ubicaciones especificadas.
RemoveAll (Collection <?> C) y retener los códigos (Collection <?> C) son los siguientes:
Public Boolean RemoveAll (colección <?> c) {objetos.requirenonnull (c); return batchremove (c, falso); } public boolean retainall (colección <?> c) {objetos.requirenonnull (c); return batchremove (c, verdadero); }Todos se implementan llamando al método Batchremove, y su código es el siguiente:
boolean boolean privado (colección <?> c, complemento booleano) {objeto final [] elementData = this.ElementData; int r = 0, w = 0; booleano modificado = falso; Pruebe {for (; r <size; r ++) if (c.contains (elementData [r]) == complemento) elementData [w ++] = elementData [r]; } Finalmente {// preserva la compatibilidad de comportamiento con abstractCollection, // incluso si c.contains () lanza. if (r! = size) {system.arrayCopy (elementData, r, elementData, w, size - r); w += tamaño - r; } if (w! = size) {// claro para dejar que GC haga su trabajo para (int i = w; i <size; i ++) elementData [i] = null; ModCount += tamaño - W; tamaño = W; modificado = verdadero; }} return modificado; }Este método tiene dos parámetros. La primera es la colección de operaciones y la segunda es un valor booleano. Al configurarlo en verdadero o falso, selecciona si debe eliminar o retener. La declaración en Try pone las restantes entre 0 y W, y finalmente la segunda si en finalmente maneja el espacio después de W, y el primero se ejecuta cuando C.Contains () lanza una excepción.