Arreglos en Java

Arreglos en Java (Arrays)

  • En este tutorial vamos a hablar de arrays en Java.
  • Usamos arrays para guardar una lista de objetos:
    • una lista de números
    • una lista de personas
    • una lista de mensajes

Déjame mostrarte.

Primer intento: convertir int en array

  • Aquí tenemos una variable de íntegro.
  • Queremos convertir esto en un array de íntegro.
  • Después de int, agregamos palitos [].

Primer intento: convertir int en array

import
public class Main {
    public static void main(String[] args) {
        // Parte 1: primitivos (copia por valor)
       int [] numbers = 1;
    }
}

¿Por qué hay error?

  • Tenemos un error de compilación, porque guardamos un único número en este array.
  • Para arreglar esto tenemos que remover 1,
  • porque los arrays son tipos de referencia.

Crear el array con new

  • Tenemos que usar el nuevo operador.
  • Repetimos el tipo.
  • En [] especificamos el tamaño o la longitud del array.

Crear el array con new

import
public class Main {
    public static void main(String[] args) {
        // Parte 1: primitivos (copia por valor)
       int [] numbers = 1;
    }
}

Crear el array con new

import
public class Main {
    public static void main(String[] args) {
        // Parte 1: primitivos (copia por valor)
       int [] numeros = new int[10];
    }
}

Definir tamaño y nombre

  • ¿Cuántos objetos queremos incluir? Digamos 5.
  • Y cambiamos el nombre a numeros porque es una lista.

Definir tamaño y nombre

import
public class Main {
    public static void main(String[] args) {
        // Parte 1: primitivos (copia por valor)
       int [] numeros = new int[10];
    }
}

Definir tamaño y nombre

public class Main {
    public static void main(String[] args) {
       int [] numeros = new int[5];
    }
}

Asignar valores con índice

  • Accedemos a objetos individuales usando un índice.
  • El primer elemento se referencia con índice 0.

Asignar valores con índice

public class Main {
    public static void main(String[] args) {
       int [] numeros = new int[5];
    }
}

Asignar valores con índice

public class Main {
    public static void main(String[] args) {
       int [] numeros = new int[5];
       numeros[0] = 1;
       numeros[1] = 2;

    }
}

Índice inválido: excepción

  • ¿Qué pasa si usamos un índice inválido?
  • Digamos 10… este array no tiene 10 objetos.
  • Veamos lo que sucede.

Índice inválido: excepción

public class Main {
    public static void main(String[] args) {
       int [] numeros = new int[5];
       numeros[0] = 1;
       numeros[10] = 2; // error de excepciones 

    }
}

¿Qué es una excepción?

  • Obtenemos una excepción.
  • Excepciones son el modo de Java para reportar errores.
  • En este caso la excepción fue levantada y el programa cae.
  • Hablaremos de excepciones en detalle más tarde en el curso.

Imprimir el array (raro)

  • Quitamos la última línea.
  • Imprimimos el array con sout tab.
  • Veamos lo que obtenemos.

Imprimir el array (raro)

public class Main {
    public static void main(String[] args) {
       int [] numeros = new int[5];
       numeros[0] = 1;
       numeros[1] = 2;
        System.out.println(numeros);

    }
}

Resultado raro

  • Obtenemos un string raro, por ejemplo:
[I@27716f4

Resultado raro

  • Por default al imprimir un array, Java retorna un string calculado basado en la dirección en memoria.
  • Si imprimes otro array, verás algo diferente.

Cómo ver los objetos del array

  • Tenemos una clase llamada Arrays.
  • Está definida en java.util.
  • Usamos el operador . para acceder a sus miembros.

Arrays.toString

  • Hay un método llamado toString.
  • Está implementado múltiples veces (para distintos tipos).
  • Esto se llama overloading.

Imprimir bien con Arrays.toString

  • Pasamos nuestro array al método Arrays.toString.
  • Eso devuelve una representación en string del array.

Imprimir bien con Arrays.toString

import java.awt.*;
import java.util.Arrays;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        // Parte 1: primitivos (copia por valor)
       int [] numeros = new int[5];
       numeros[0] = 1;
       numeros[1] = 2;
        System.out.println(Arrays.toString(numeros));

    }
}

Valores por default

  • Los primeros 2 objetos están inicializados.
  • Los otros se setean a 0 por default (porque es int).

Valores por default

  • Si fuera boolean: por default sería false.
  • Si fuera string: por default sería un string vacío.

Sintaxis vieja vs sintaxis nueva

  • Esta forma con new int[5] y asignaciones es tediosa.
  • Hay una manera más nueva si conocemos los objetos antes.

Inicialización con llaves

  • Quitamos el new.
  • Usamos { }.
  • Ponemos los objetos: 2, 3, 5, 1, 4.

Inicialización con llaves

import java.awt.*;
import java.util.Arrays;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        // Parte 1: primitivos (copia por valor)
       int [] numeros = {1,2,3,4,5};
        System.out.println(numeros.length);
        System.out.println(Arrays.toString(numeros));
    }
}

length: longitud del array

  • length es un campo (icono f).
  • Devuelve el número de objetos en el array.
  • Aquí obtenemos 5.

Tamaño fijo

  • En Java, los arrays tienen un tamaño fijo.
  • Una vez creados, no puedes agregar o retirar objetos.
  • Si necesitas eso, usarás colecciones (más adelante).

Por ahora: recuerda que los arrays tienen longitud fija.

Ordenar el array

  • Nuestro array puede estar en orden random.
  • Podemos arreglarlo con Arrays.sort.

Arrays.sort (con transición)

import java.awt.*;
import java.util.Arrays;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        // Parte 1: primitivos (copia por valor)
       int [] numeros = {1,2,3,4,5};
        System.out.println(numeros.length);
        System.out.println(Arrays.toString(numeros));
    }
}

Arrays.sort (ya aplicado)

import java.awt.*;
import java.util.Arrays;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        // Parte 1: primitivos (copia por valor)
       int [] numeros = {1,2,3,4,5};
       Arrays.sort(numeros);
        System.out.println(numeros.length);
        System.out.println(Arrays.toString(numeros));
    }
}

Resultado

  • Ahora al ejecutar, el array aparece ordenado.
  • Y seguimos viendo la longitud con length.