Cómo revertir una lista en Java

Cómo revertir una lista en Java

Revertir una lista en Java hoy no es sencillo. Por eso se escribe este artículo. Técnicamente, una lista en Java es una interfaz. Una interfaz es una clase con firmas de método que no tienen definiciones. Se debe implementar una clase de esta interfaz antes de que se puedan instanciar objetos de la clase implementada. En la clase implementada, los métodos están definidos.

Hay una clase, todavía llamada lista, en Java. Sin embargo, esta clase está destinada a elementos de cadena para la lista. Una lista no solo tiene que estar compuesta por cuerdas. Una lista puede consistir en todas las carrozas, todos los dobles, todos los enteros, etc. Cada uno de estos tipos necesitaría revertirse, dependiendo del problema en cuestión. Entonces, esta clase no se menciona más en este artículo para la lista de cadenas. Revertir una lista en este artículo se refiere a la interfaz de la lista realizada en una clase y un objeto.

Hay clases de lista predefinidas de Java implementadas desde la interfaz de la lista. Estas clases de listas son: AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteAryList, LinkedList, Rolelist, RoleUnresolvedList, Stack y The Vector.

La mayoría de estas clases de listas están en el Java.utilizar.* paquete.

Colecciones de clases

La clase de colecciones también está en el Java.utilizar.* paquete. La clase de colecciones tiene un método estático reverso () que devuelve vacío. El método estático significa que la clase de colecciones no tiene que ser instanciada antes de utilizar el método inverso. Este método tomará cualquiera de los objetos de la lista anterior como argumento y lo revertirá.

Algunas expresiones pueden devolver un objeto de lista de propósito general. El método de inversa de las colecciones también revertirá este objeto de lista cuando se administre como argumento.

La sintaxis para el método de reversa () de colecciones es:

Reverso de vacío estático (lista de listas)

Revertir manualmente

Un objeto de lista en Java también se puede revertir manualmente. Dos de estos métodos manuales también se explican en este artículo.

Invertir utilizando el método de inversión de colecciones

Revertir una lista predefinida
El siguiente programa invierte una lista de matrices de alfabetos:

importar java.utilizar.*;
clase pública THECLASS
public static void main (string [] args)
Lista de arreglo Al = nueva ArrayList();
Alabama.agregar ('v'); Alabama.agregar ('w'); Alabama.agregar ('x'); Alabama.agregar ('y'); Alabama.agregar ('z');
Colecciones.reverso (Al);
Sistema.afuera.println (Al);

La salida es:

[Z, Y, X, W, V]

para una entrada de,

[V W X Y Z]

Tenga en cuenta la forma en que se han utilizado la clase de colecciones y su método reverse ().

Revertir una lista de propósito general devuelto

Suponga que ARR es una variedad de personajes. La clase, matrices, en el Java.utilizar.* Paquete, tiene el método estático, aslist (), que tomaría ARR como argumento y devolvería una lista de propósito general de tamaño fijo con los mismos caracteres. El método inverso estático de la clase de colecciones aún revertiría esta lista. El siguiente programa ilustra esto:

importar java.utilizar.*;
clase pública THECLASS
public static void main (string [] args)
Personaje [] arr = nuevo personaje [] 'v', 'w', 'x', 'y', 'z';
Lista LST = matrices.aslist (arr);
Colecciones.reverso (LST);
Sistema.afuera.println (LST);

La salida es:

[Z, Y, X, W, V]

Revertir una lista manualmente en Java

Una forma en que se puede revertir una matriz es intercambiando los elementos. El último elemento se intercambia con el primero; El último pero uno se intercambia con el segundo; El tercero al último se intercambia con el tercero; etcétera. Se necesitan dos índices, I y J, para este proceso. El índice I es desde el principio, y J es desde el final. En el proceso, intercambiar caries mientras yo es menos que j. Todos los elementos están intercambiados si la lista tiene un tamaño de número uniforme. Si la lista tiene un tamaño de número impar, entonces el elemento central permanece en su posición. Esta forma de revertir debe usarse con listas de tamaño fijo y matrices.

La otra forma de revertir manualmente se puede ilustrar de la siguiente manera:

Aquí está la lista que se revertirá:

V W X Y Z

El último elemento, Z, se elimina e se inserta en la primera posición para que la lista se convierta:

Z, V, W, X, Y

El nuevo último elemento se elimina e se inserta en la segunda posición para que la lista se convierta:

Z, Y, V, W, X

El nuevo último elemento se elimina e se inserta en la tercera posición para que la lista se convierta en:

Z, y, x, v, w

El nuevo último elemento se elimina e se inserta en la cuarta posición para que la lista se convierta:

Z, Y, X, W, V

Tenga en cuenta que el tamaño de la lista nunca cambió para cada resultado. En este caso, si J fuera el índice del último elemento, entonces el valor de J no cambiaría en el proceso. Mientras que el valor del índice I, desde el principio, cambiaría de 0 a 3. Entonces, me incrementa hasta que está justo debajo de J por una unidad. Esta forma de revertir es la forma de eliminar e insertar.

De esta manera no se puede usar con la lista de tamaño fijo porque un elemento no se puede eliminar con la lista de tamaño fijo.

Invertir cambiando

El método principal para usar aquí es el método set () de la interfaz de lista, cuya sintaxis completa es:

E set (int index, e elemento)

El primer argumento para este método es el índice de un elemento particular en la lista. El segundo argumento es el elemento para reemplazar el elemento en la posición del índice. El siguiente programa realiza un intercambio de una lista de tamaño fijo.

importar java.utilizar.*;
clase pública THECLASS
public static void main (string [] args)
Personaje [] arr = nuevo personaje [] 'v', 'w', 'x', 'y', 'z';
Lista LST = matrices.aslist (arr);
int j = lst.tamaño () - 1;
para (int i = 0; ichar temp = lst.conseguir (j);
LST.set (J, LST.Consigo));
LST.set (i, temp);
J--;

Sistema.afuera.println (LST);

La salida es:

[Z, Y, X, W, V]

El intercambio usa el código clásico para intercambiar dos valores. En este caso, el código es:

char temp = lst.conseguir (j);
LST.set (J, LST.Consigo));
LST.set (i, temp);

En la declaración de inicialización, es posible inicializar J en el for-bucle. También es posible disminuir J en la declaración de iteración siguiente del bucle for-bucle. Dos expresiones, en este caso, están separadas por una coma. El for-loop anterior se vuelve a codificar de la siguiente manera:

importar java.utilizar.*;
clase pública THECLASS
public static void main (string [] args)
Personaje [] arr = nuevo personaje [] 'v', 'w', 'x', 'y', 'z';
Lista LST = matrices.aslist (arr);
para (int i = 0, j = lst.tamaño () - 1; ichar temp = lst.conseguir (j);
LST.set (J, LST.Consigo));
LST.set (i, temp);

Sistema.afuera.println (LST);

Aquí, un bucle único está manejando dos variables. La salida es la misma, como se muestra a continuación:

[Z, Y, X, W, V]

Invertir por eliminar e insertar

La forma de eliminar e insertar no puede funcionar con la lista de tamaño fijo devuelto. Sin embargo, puede funcionar con las clases de lista predefinidas. De esta manera usa el método add () de la lista, cuya sintaxis es:

Void Add (INT ÍNDICE, ELEMENTO E)

El "agregar" aquí significa insertar. Es decir: inserte el elemento E en el índice especificado. Después de la inserción, todos los elementos de la derecha se desplazan un lugar.

También usa el método remove (), cuya sintaxis es:

E eliminar (índice int)

Esto significa: eliminar el elemento en el índice especificado y devolverlo. El siguiente programa elimina e inserta (para revertir):

importar java.utilizar.*;
clase pública THECLASS
public static void main (string [] args)
Lista de arreglo Al = nueva ArrayList();
Alabama.agregar ('v'); Alabama.agregar ('w'); Alabama.agregar ('x'); Alabama.agregar ('y'); Alabama.agregar ('z');
int j = al.tamaño () - 1;
para (int i = 0; iChar temp = AL.eliminar (j);
Alabama.agregar (i, temp);

Sistema.afuera.println (Al);

La salida es:

[Z, Y, X, W, V]

Como se esperaba y para este programa, el valor de J no cambia desde un punto de vista general.

Es posible inicializar J en la instrucción de inicialización en el bucle for-loop. Dos expresiones, en este caso, están separadas por una coma. El for-loop anterior se vuelve a codificar de la siguiente manera:

importar java.utilizar.*;
clase pública THECLASS
public static void main (string [] args)
Lista de arreglo Al = nueva ArrayList();
Alabama.agregar ('v'); Alabama.agregar ('w'); Alabama.agregar ('x'); Alabama.agregar ('y'); Alabama.agregar ('z');
para (int i = 0, j = al.tamaño () - 1; iAlabama.Agregar (yo, al.eliminar (j));

Sistema.afuera.println (Al);

La salida es:

[Z, Y, X, W, V]

Como se esperaba.

Conclusión

Este artículo explicó que una lista podría revertirse utilizando el método static reverse () de la clase de colecciones, donde el objeto de lista se convierte en el argumento del método. Además, una lista también se puede revertir manualmente mediante el intercambio de elementos o mediante el uso. Esperamos que hayas encontrado este artículo útil. Consulte los otros artículos de Sugerencia de Linux para obtener más consejos y tutoriales.