Java List es una colección ordenada. Java List es una interfaz que extiende la interfaz Collection. Java List proporciona control sobre la posición en la que se puede insertar un elemento. Se puede acceder a los elementos por su índice y también buscar elementos en la lista.
Lista de Java
Algunos de los puntos importantes sobre Java List son:
- La interfaz Java List es miembro del marco de colecciones Java.
- La lista le permite agregar elementos duplicados.
- La lista le permite tener elementos ‘nulos’.
- La interfaz de lista tiene muchos métodos predeterminados en Java 8, por ejemplo, replaceAll, sort y spliterator.
- Los índices de lista comienzan desde 0, al igual que las matrices.
- List admite genéricos y deberíamos usarlos siempre que sea posible. El uso de genéricos con List evitará ClassCastException en tiempo de ejecución.
Diagrama de clases de lista de Java
La interfaz List de Java extiende la interfaz Collection. La interfaz Collection es externa a la interfaz Iterable. Algunas de las clases de implementación de List más utilizadas son ArrayList, LinkedList, Vector, Stack, CopyOnWriteArrayList. AbstractList proporciona una implementación básica de la interfaz List para reducir el esfuerzo de implementación de List.
Métodos de lista de Java
Algunos de los métodos de lista Java útiles son:
- int size() : para obtener el número de elementos en la lista.
- boolean isEmpty() : para comprobar si la lista está vacía o no.
- boolean contains(Object o) : Devuelve verdadero si esta lista contiene el elemento especificado.
- IteratorE iterator() : Devuelve un iterador sobre los elementos de esta lista en la secuencia adecuada.
- Object[] toArray() : Devuelve una matriz que contiene todos los elementos de esta lista en la secuencia adecuada
- boolean add(E e) : añade el elemento especificado al final de esta lista.
- boolean remove(Object o) : elimina la primera aparición del elemento especificado de esta lista.
- boolean holdAll(Collection? c) : conserva solo los elementos de esta lista que están contenidos en la colección especificada.
- void clear() : elimina todos los elementos de la lista.
- E get(int index) : Devuelve el elemento en la posición especificada en la lista.
- E set(int index, E element) : reemplaza el elemento en la posición especificada en la lista con el elemento especificado.
- ListIteratorE listIterator() : Devuelve un iterador de lista sobre los elementos de la lista.
- ListE subList(int fromIndex, int toIndex) : devuelve una vista de la parte de esta lista comprendida entre el fromIndex especificado, inclusive, y el toIndex, exclusivo. La lista devuelta está respaldada por esta lista, por lo que los cambios no estructurales en la lista devuelta se reflejan en esta lista y viceversa.
Algunos de los métodos predeterminados agregados a List en Java 8 son;
- void replaceAll(UnaryOperatorE operator) : reemplaza cada elemento de esta lista con el resultado de aplicar el operador a ese elemento.
- void sort(Comparatorsuper E c) predeterminado : ordena esta lista según el orden inducido por el Comparador especificado.
- SpliteratorE predeterminado spliterator() : crea un Spliterator sobre los elementos de esta lista.
Matriz Java a lista
Podemos usar la clase Arrays para obtener la vista de la matriz como una lista. Sin embargo, no podremos realizar ninguna modificación estructural en la lista, ya que se generará una excepción java.lang.UnsupportedOperationException. Por lo tanto, la mejor manera es usar un bucle for para crear una lista iterando sobre la matriz. A continuación, se muestra un ejemplo simple que muestra cómo convertir una matriz de Java en una lista correctamente.
package com.journaldev.examples;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class ArrayToList {public static void main(String[] args) {String[] vowels = {"a","e","i","o","u"};ListString vowelsList = Arrays.asList(vowels);System.out.println(vowelsList);/** * List is backed by array, we can't do structural modification * Both of the below statements will throw java.lang.UnsupportedOperationException *///vowelsList.remove("e");//vowelsList.clear();//using for loop to copy elements from array to list, safe for modification of listListString myList = new ArrayList();for(String s : vowels){myList.add(s);}System.out.println(myList);myList.clear();}}
Elija cualquiera de los métodos anteriores según los requisitos de su proyecto.
Lista Java a matriz
Un ejemplo simple que muestra la forma correcta de convertir una lista en una matriz.
package com.journaldev.examples;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class ListToArray {public static void main(String[] args) {ListString letters = new ArrayListString();// add exampleletters.add("A");letters.add("B");letters.add("C");//convert list to arrayString[] strArray = new String[letters.size()];strArray = letters.toArray(strArray);System.out.println(Arrays.toString(strArray)); //will print "[A, B, C]"}}
Ordenación de listas en Java
Hay dos formas de ordenar una lista. Podemos usar la clase Collections para ordenar de forma natural o podemos usar el método List sort() y usar nuestro propio Comparator para ordenar. A continuación, se muestra un ejemplo simple de ordenación de listas en Java.
package com.journaldev.examples;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Random;public class ListSortExample {public static void main(String[] args) {ListInteger ints = new ArrayList();Random random = new Random();for (int i = 0; i 10; i++) ints.add(random.nextInt(1000));//natural sorting using Collections classCollections.sort(ints);System.out.println("Natural Sorting: "+ints);//My custom sorting, reverse orderints.sort((o1,o2) - {return (o2-o1);});System.out.println("Reverse Sorting: "+ints);}}
A continuación se muestra un ejemplo de salida. Dado que utilizo Random para generar elementos de lista, será diferente cada vez.
Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]
Operaciones comunes de listas de Java
Las operaciones más comunes realizadas en una lista de Java son agregar, eliminar, establecer, borrar, dimensionar, etc. A continuación se muestra un ejemplo simple de una lista de Java que muestra el uso de métodos comunes.
package com.journaldev.examples;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class ListExample {public static void main(String args[]) {ListString vowels= new ArrayListString();//add examplevowels.add("A");vowels.add("I");//let's insert E between A and Ivowels.add(1,"E");System.out.println(vowels);ListString list = new ArrayListString();list.add("O");list.add("U");//appending list elements to lettersvowels.addAll(list);System.out.println(vowels);//clear example to empty the listlist.clear();//size exampleSystem.out.println("letters list size = "+vowels.size());//set examplevowels.set(2, "E");System.out.println(vowels);//subList examplevowels.clear();vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");list = vowels.subList(0, 2);System.out.println("letters = "+vowels+", list = "+list);vowels.set(0, "A");System.out.println("letters = "+vowels+", list = "+list);list.add("U");System.out.println("letters = "+vowels+", list = "+list);}}
La salida del programa de ejemplo de lista Java anterior es:
[A, E, I][A, E, I, O, U]letters list size = 5[A, E, E, O, U]letters = [E, E, I, O], list = [E, E]letters = [A, E, I, O], list = [A, E]letters = [A, E, U, I, O], list = [A, E, U]
Iterador de lista de Java
A continuación se muestra un ejemplo simple que muestra cómo iterar sobre una lista en Java.
package com.journaldev.examples;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ListIteratorExample {public static void main(String[] args) {ListInteger list = new ArrayList();for(int i=0; i5; i++) list.add(i);IteratorInteger iterator = list.iterator();//simple iterationwhile(iterator.hasNext()){int i = (int) iterator.next();System.out.print(i + ", ");}System.out.println("n"+list);//modification of list using iteratoriterator = list.iterator();while(iterator.hasNext()){int x = (int) iterator.next();if(x%2 ==0) iterator.remove();}System.out.println(list);//changing list structure while iteratingiterator = list.iterator();while(iterator.hasNext()){int x = (int) iterator.next(); //ConcurrentModificationException hereif(x==1) list.add(10);}}}
La salida del programa iterador de lista Java anterior es:
0, 1, 2, 3, 4, [0, 1, 2, 3, 4][1, 3]Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)at java.util.ArrayList$Itr.next(ArrayList.java:851)at com.journaldev.examples.ListIteratorExample.main(ListIteratorExample.java:34)
Eso es todo en un breve resumen de las listas en Java. Espero que estos ejemplos de listas en Java te ayuden a comenzar a programar colecciones de listas.