CodeGym /Cursos /JAVA 25 SELF /Clase Arrays: sort, fill, copyOf, equals

Clase Arrays: sort, fill, copyOf, equals

JAVA 25 SELF
Nivel 7, Lección 5
Disponible

1. Introducción

Los arrays en Java son una herramienta potente, pero la sintaxis básica enseguida se vuelve rutinaria. Ahí es donde entra en juego la clase java.util.Arrays — un conjunto de métodos estáticos para trabajar con arrays: ordenación, copia, comparación, salida formateada y más. No hace falta crear instancias — todos los métodos son estáticos y se invocan por el nombre de la clase.

Para utilizar los métodos, añade la importación al comienzo del archivo:

import java.util.Arrays;

Si olvidas la importación, el compilador se quejará de que Arrays «no se encuentra» — no es un bug, sino el comportamiento esperado sin el import.

2. Ordenación de un array: Arrays.sort

Cómo funciona Arrays.sort

Sintaxis


Arrays.sort(array);
Arrays.sort(array, startIndex, endIndex);
Ordenación de todo el array o de un subrango

El método ordena «in situ» — modifica el array original y no devuelve uno nuevo. ¿Quieres conservar el orden original? Copia el array primero.

Ejemplo: ordenar un array de enteros

int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // Ordenamos en orden ascendente

System.out.println("Array ordenado: " + Arrays.toString(scores));
// Imprimirá: [1, 2, 5, 7, 9]

Ejemplo: ordenar un array de cadenas

String[] names = {"Vasya", "Petya", "Anya", "Igor’"};
Arrays.sort(names);

System.out.println(Arrays.toString(names));
// [Anya, Igor’, Petya, Vasya]

Importante: las cadenas se ordenan lexicográficamente (por orden alfabético) y los números en orden ascendente.

Ordenar una parte del array

int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // ordena los elementos desde el índice 1 hasta el 3 inclusive (el 4 no se incluye)

System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]

Particularidades

  • Ordenación «in situ»: el array original cambia.
  • Números: ascendente; cadenas: alfabético.
  • Para objetos complejos, usa las sobrecargas con Comparator.

3. Relleno de un array: Arrays.fill

Sintaxis


Arrays.fill(array, value);
Arrays.fill(array, startIndex, endIndex, value);
Rellenar todo el array o un rango con un mismo valor

El método rellena todos los elementos o la parte indicada del array con el mismo valor.

int[] marks = new int[5];
Arrays.fill(marks, 3); // Todos los elementos ahora valen 3
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]

Rellenar una parte del array

int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // Rellenará los elementos desde el índice 2 hasta el 4 inclusive (el 5 no se incluye)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]

Rellenar un array de cadenas

String[] guests = new String[4];
Arrays.fill(guests, "Vacío");
System.out.println(Arrays.toString(guests)); // [Vacío, Vacío, Vacío, Vacío]

4. Copia de un array: Arrays.copyOf y Arrays.copyOfRange

Arrays.copyOf

Sintaxis


Arrays.copyOf(sourceArray, newLength);
Crear una copia nueva con la longitud indicada

Crea un nuevo array y copia los elementos del original. Si la nueva longitud es mayor que la del original, la «cola» se rellena con los valores por defecto (0 para int, null para los de referencia).

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]

Reducir un array

int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]

Arrays.copyOfRange

Sintaxis


Arrays.copyOfRange(sourceArray, startIndex, endIndex);
Copiar un subarray en un array nuevo
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // Copiará los elementos desde el índice 1 hasta el 3
System.out.println(Arrays.toString(mid)); // [20, 30, 40]

5. Comparación de arrays: Arrays.equals y Arrays.deepEquals

En Java no se pueden comparar arrays con == — así se comparan las referencias, no el contenido:

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!

¿Cómo comparar el contenido?


Arrays.equals(array1, array2);
Arrays.deepEquals(matrix1, matrix2);
Comparación superficial y profunda
System.out.println(Arrays.equals(a, b)); // true

Para arrays unidimensionales usa Arrays.equals; para bidimensionales y de mayor profundidad, Arrays.deepEquals.

Ejemplo: comparar arrays bidimensionales

int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};

System.out.println(Arrays.equals(matrix1, matrix2));     // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true

6. Salida legible de un array: Arrays.toString y Arrays.deepToString

Imprimir un array directamente dará una cadena ilegible:

int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d

Sintaxis


Arrays.toString(array);
Arrays.deepToString(matrix);
Salida formateada de arrays unidimensionales y multidimensionales
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]

7. Errores típicos al trabajar con la clase Arrays

Error n.º 1: intentar comparar arrays con ==
Los arrays son objetos, y == solo compara referencias. Incluso con valores iguales, el resultado será false. Usa Arrays.equals (para unidimensionales) o Arrays.deepEquals (para multidimensionales).

Error n.º 2: olvidar que la ordenación cambia el array «in situ»
Si necesitas el orden original, primero crea una copia con Arrays.copyOf y solo después ordena la copia. De lo contrario, el original perderá su orden.

Error n.º 3: malentender los límites en Arrays.fill y Arrays.copyOfRange
Estos métodos usan un rango semiabierto: el índice derecho no se incluye. Por ejemplo, Arrays.fill(arr, 2, 5, 9) rellenará los índices 2, 3, 4, y no tocará el elemento en el índice 5.

Error n.º 4: intentar imprimir un array directamente
Llamar a System.out.println(arr) imprime una representación técnica. Usa Arrays.toString para unidimensionales y Arrays.deepToString para arrays multidimensionales.

Error n.º 5: comparar arrays multidimensionales con Arrays.equals
Este método solo compara el nivel superior (las referencias a los arrays internos). Para comparar el contenido, usa Arrays.deepEquals.

1
Tarea
JAVA 25 SELF, nivel 7, lección 5
Bloqueada
Ordenar los resultados de la carrera 🏃‍♂️
Ordenar los resultados de la carrera 🏃‍♂️
1
Tarea
JAVA 25 SELF, nivel 7, lección 5
Bloqueada
Inicialización de celdas de almacén vacías 📦
Inicialización de celdas de almacén vacías 📦
1
Tarea
JAVA 25 SELF, nivel 7, lección 5
Bloqueada
Extracción de lecturas centrales de la estación meteorológica ☀️
Extracción de lecturas centrales de la estación meteorológica ☀️
1
Tarea
JAVA 25 SELF, nivel 7, lección 5
Bloqueada
Verificación de códigos de acceso secretos 🔐
Verificación de códigos de acceso secretos 🔐
1
Cuestionario/control
Arrays, nivel 7, lección 5
No disponible
Arrays
Introducción a los arrays
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION