7.5 Extras
¿Qué más ofrece las clases java.util.Collections y java.util.Arrays de Java? Una vez vista la ordenación, quizás lo más complicado, veamos algunas operaciones adicionales.
En los ejemplos, la variable array es un array y la variable lista es una lista de cualquier tipo de elemento:
| Operación | Descripción | Ejemplos |
|---|---|---|
| Desordenar una lista | Desordena una lista, este método no está disponible para arrays. | Collections.shuffle (lista); |
| Rellenar una lista o array | Rellena una lista o array copiando el mismo valor en todos los elementos del array o lista. Útil para reiniciar una lista o array. | Collections.fill (lista,elemento);Arrays.fill (array,elemento); |
| Búsqueda binaria | Permite realizar búsquedas rápidas en un una lista o array ordenados. Es necesario que la lista o array estén ordenados, sino lo están, la búsqueda no tendrá éxito. | Collections.binarySearch(lista,elemento);Arrays.binarySearch(array, elemento); |
| Convertir un array a lista | Permite rápidamente convertir un array a una lista de elementos, extremadamente útil. No se especifica el tipo de lista retornado (no es ArrayList ni LinkedList), solo se especifica que retorna una lista que implementa la interfaz java.util.List. |
List lista = Arrays.asList(array); Si el tipo de dato almacenado en el array es conocido ( Integer por ejemplo), es conveniente especificar el tipo de objeto de la lista: List<Integer> lista = Arrays.asList(array); |
| Convertir una lista a array | Permite convertir una lista en array. Esto se puede realizar en todas las colecciones, y no es un método de la clase Collections, sino propio de la interfaz Collection. Es conveniente que sepas de su existencia. |
Para este ejemplo, supondremos que los elementos de la lista son números, dado que hay que crear un array del tipo almacenado en la lista, y del tamaño de la lista: Integer[] array=new Integer[lista.size()];lista.toArray(array); |
| Dar la vuelta | Da la vuelta a una lista, poniéndola en orden inverso al que tiene. | Collections.reverse(lista); |
| Imprimir un array o lista | lista.toString()Arrays.toString(array) |
Dividir cadenas¶
Otra operación que ya se ha visto en algún ejemplo anterior es la de dividir una cadena en partes. Cuando una cadena está formada internamente por trozos de texto claramente delimitados por un separador (una coma, un punto y coma o cualquier otro), es posible dividir la cadena y obtener cada uno de los trozos de texto por separado en un array de cadenas.
Para poder realizar esta operación, usaremos el método split de la clase String . El delimitador o separador es una expresión regular, único argumento del método split, y puede ser obviamente todo lo complejo que sea necesario:
En el ejemplo anterior la cadena texto contiene una serie de letras separadas por comas. La cadena se ha dividido con el método split , y se ha guardado cada carácter por separado en un array. Después se ha ordenado el array. ¡Increíble lo que se puede llegar a hacer con solo tres líneas de código!
separador |
El método split(String regex) en Java trata el argumento como una expresión regular (regex). En regex, el carácter | es un operador de alternancia, lo que significa "o". Esto hace que .split("|") divida la cadena en cada carácter individual en lugar de dividir por el carácter |.
Si realmente deseas dividir por "|", debes escapar el carácter de barra vertical utilizando \\|: