1.Arrays.fill()
Cuando se trabaja con arreglos, los programadores de Java a menudo necesitan llenar el arreglo con el mismo valor. Por supuesto, puede escribir un ciclo y simplemente asignar algún valor a cada celda de la matriz en el ciclo:
int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;
O simplemente puede llamar al Arrays.fill()
método, que hace exactamente lo mismo: llena la matriz pasada con el valor pasado. Así es como se ve:
Arrays.fill(name, value)
Y el código del ejemplo anterior se puede hacer un poco más compacto y claro:
int[] x = new int[100];
Arrays.fill(x, 999);
También puede usar el Arrays.fill()
método para llenar no toda la matriz, sino una parte de ella, con algún valor:
Arrays.fill(name, first, last, value)
Donde primero y último son los índices de la primera y última celda a llenar.
Ejemplo:
|
Estamos llenando las celdas x[3] , x[4] , x[5] y x[6] con el valor 999 . ¡Las celdas de una matriz se numeran a partir de cero! La str variable contiene el valor:
|
El Arrays.fill()
método solo funciona con matrices unidimensionales. Si pasa una matriz bidimensional al método, se tratará como unidimensional, con todas las consecuencias resultantes.
2.Arrays.copyOf()
Como ya sabe, no puede cambiar el tamaño de una matriz después de haberla creado.
Pero, ¿y si realmente quieres?
Bueno, si realmente quieres, ¡entonces puedes!
- Crear una nueva matriz de la longitud deseada
- Copie todos los elementos de la primera matriz en él.
Por cierto, esto es exactamente lo que Arrays.copyOf()
hace el método. Esto es lo que parece llamarlo:
Type[] name2 = Arrays.copyOf(name, length);
Este método no cambia la matriz existente , sino que crea una nueva matriz y copia los elementos de la matriz anterior en ella.
Si los elementos no encajan (la longitud es menor que la longitud de la matriz existente ), los valores adicionales se ignoran.
Si la longitud de la nueva matriz es mayor que la longitud de la anterior, las celdas se llenan con ceros.
Ejemplo:
|
La str2 variable contiene el valor:
La str3 variable contiene el valor:
|
3.Arrays.copyOfRange()
¿Y qué sucede si desea obtener una matriz de longitud 5 a partir de una matriz de longitud 10, pero necesita que contenga los últimos 5 elementos en lugar de los primeros 5?
En este caso, Arrays
será útil otro método de la clase: el Arrays.copyOfRange()
. Esto es lo que parece cuando lo llamamos:
Type[] name2 = Arrays.copyOfRange(name, first, last);
Este método también crea una nueva matriz, pero la llena con elementos de un lugar arbitrario en la matriz original. Donde primero y último son los índices de los elementos primero y último que deben colocarse en la nueva matriz.
Ejemplo:
|
La str2 variable contiene el valor:
La str3 variable contiene el valor:
|
4.Arrays.sort()
Ah, la delicia más deliciosa: clasificar . Las matrices se ordenan con bastante frecuencia en la programación. Las tres acciones más comunes cuando se trabaja con arreglos son:
- Ordenar una matriz
- Encontrar el elemento mínimo (o máximo) de una matriz
- Determinar el índice de un elemento en una matriz (encontrar un elemento en una matriz)
Esta es precisamente la razón por la que los creadores de Java incluyeron el sort()
método en la Arrays
clase. Esto es lo que parece llamarlo:
Arrays.sort(name);
Este método ordena la matriz pasada en orden ascendente.
Ejemplo:
|
La str variable contiene el valor:
|
Excelente, ¿verdad? Llamó a un método y ahora tiene una matriz ordenada. Hermoso.
Por cierto, puede usar este método para ordenar no solo la matriz completa, sino solo una parte de ella. Esto es lo que parece llamarlo:
Arrays.sort(name, first, last);
Donde primero y último son los índices de la primera y la última celda que debe tocar la ordenación.
Ejemplo:
|
La str variable contiene el valor:
|
Para ordenar arreglos, Java utiliza el algoritmo de ordenación más rápido: QuickSort . Su complejidad computacional depende del tamaño de la matriz y se calcula mediante la fórmula N log(N).
Ordenar una matriz de 1000 elementos implicará unas 3000 comparaciones de elementos de la matriz. Ordenar una matriz de un millón de elementos implicará alrededor de 6 millones de comparaciones.
5.Arrays.binarySearch()
Bueno, y el último de los métodos más interesantes de la Arrays
clase es capaz de buscar un valor dado en una matriz. Esta no es una búsqueda común, es la querida búsqueda binaria . Todo se reduce a esto:
- Primero, se ordena la matriz.
- Luego, el elemento central de la matriz se compara con el que estamos buscando.
- Si el elemento es mayor que el elemento del medio, la búsqueda continúa en la mitad derecha de la matriz.
- Si el elemento que estamos buscando es menor que el elemento del medio, la búsqueda continúa en la mitad izquierda de la matriz.
Debido a que la matriz está ordenada, es posible eliminar la mitad en una sola comparación. Luego, en el siguiente paso, tiramos otra mitad, y así sucesivamente.
Este enfoque hace que la búsqueda binaria sea muy rápida. En una matriz de un millón (!) de elementos, puede encontrar el índice del elemento deseado en solo 20 comparaciones. La deficiencia del enfoque es que primero se debe ordenar la matriz, y la ordenación también lleva tiempo.
Esto es lo que parece llamarlo:
int index = Arrays.binarySearch(name, value);
Donde name
está el nombre de la matriz, que debe pasarse ya ordenada (por ejemplo, usando el Arrays.sort()
método). Y value
es el elemento que estamos buscando en la matriz. El resultado devuelto por el método es el índice del elemento de matriz deseado .
Ejemplos:
|
x es:
4 1 (índices 0 y 2 también son aceptables)8 -7 |
Si la matriz contiene varias instancias del elemento que se busca, el algoritmo simplemente devolverá el índice de una de ellas (no hay garantía de que sea, por ejemplo, la primera, o viceversa, la última de estas). elementos duplicados)."
Si el elemento no se encuentra en la matriz, el índice será negativo.
6. Enlace a la documentación de Oracle sobre la Arrays
clase
Si está muy interesado, puede leer todo sobre la Arrays
clase y todos sus métodos en la documentación oficial a href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base /java/util/Arrays.html">en el sitio web de Oracle.
Por ejemplo, puede leer sobre los métodos Arrays.mismatch()
y Arrays.compare()
. Tal vez los encuentre útiles de alguna manera.
Y no se confunda por la cantidad de métodos. Cada método tiene de 5 a 10 variantes, que difieren solo en sus tipos de parámetros.
GO TO FULL VERSION