Iagovar

Tipos de datos avanzados en java

Tipos de colecciones y características a recordar para gente olvidadiza, como yo

Arrays

Los arrays en Java no son como las listas en Python, sólo pueden contener un sólo tipo de datos, y además hay que, o bien declarar el tamaño, o inicializarlo con los valores, directamente. No cambian de tamaño.

Es decir, se puede hacer o bien int miArray[] = new int[6] o bien int miArray = {1, 2, 3, 4, 5, 6}

Si no se inicializa, en el caso de un array con enteros, los "espacios" no ocupados tendrán un 0, y en uno con cadenas de texto, al imprimir mostrará "".

Arrays multidimensionales

Los arrays multidimensionales se declaran, simplemente, añadiendo corchetes: int miArray[][][] = new int[6][7][8]. En este ejemplo tridimensional, se podría interpretar 6 posiciones en la X, 7 en la Y, 9 en la Z.

Podemos asignar un valor, por ejemplo, con miArray[1][2][3] = 1, sabiendo que el valor 1 se encuentra en la posición 1 X, 2 Y, 3 Z.

También podemos inicializarlo con:

int miArray[][][] = {
    {{1, 2, 3}, {4, 5, 6}}, {{7, 8, 9}, {10, 11, 12}}
};

Para recorrer el array tridimensional podemos usar bucles for anidados:

for (int dim1 = 0; dim1 < miArray.length; dim1++) {
    for (int dim2 = 0; dim2 < miArray[dim1].length; dim2++) {
        for (int dim3 = 0; dim3 < miArray[dim1][dim2].length; dim3++) {
            System.out.print(miArray[dim1][dim2][dim3] + " ");
        }
    }
}

Para recordar:

Consultar para más info: Programiz

Vectores

import java.util.Vector;

Vector<Integer> vector = new Vector<Integer>(int initialCapacity, int capacityIncrement); // Crea un vector de enteros con tamaño inicial de 10

ArrayList

import java.util.ArrayList;

ArrayList<String> listaNombres = new ArrayList<>(int CapacidadInicial);

// O también, inicializando con una colección previa:

Integer[] arreglo = {1, 2, 3, 4, 5};
ArrayList<Integer> lista = new ArrayList<>(Arrays.asList(arreglo));

LinkedList

import java.util.LinkedList;

// No tiene capacidad predefinida, asi que no hay de declarar nada al inicio
LinkedList<String> miLinkedList = new LinkedList<>();
miLinkedList.add("Un Elemento")

LinkedList es una implementación de la interfaz List en Java que utiliza una estructura de datos de lista enlazada para almacenar sus elementos.

LinkedList ofrece algunas operaciones adicionales que son específicas de su estructura de lista enlazada, como addFirst(elemento) para agregar un elemento al inicio de la lista, addLast(elemento) para agregar un elemento al final de la lista, removeFirst() para eliminar el primer elemento de la lista, y removeLast() para eliminar el último elemento de la lista.

Bigdecimal

import java.math.BigDecimal;

BigDecimal miDecimal = new BigDecimal("10.50");

BigDecimal se usa para hacer cálculos precisos con decimales de cualquier longitud.

Esto se consigue tratando a los decimales como objetos, y el tradeoff es que, entornos de mucho volúmen de trabajo, es más lento que los tipos nativos.

Sin embargo, salvo para entornos tipo HFT o similares, la penalización por rendimiento no se notará. Tiene que haber mucho, mucho volúmen de cálculo para que se note (o el hardware ser realmente limitado).

Mapas: TreeMap, HashMap y otros

import java.util.HashMap;

HashMap<String, Integer> people = new HashMap<String, Integer>();

people.put("John", 32);

Los mapas en Java son estructuras clave-valor, como los diccionarios en Python.

Los más populares son TreeMap y HashMap, pero hay muchos otros (Colored Btree Map es interesante también).

Todos los mapas en Java son implementaciones de la interfaz Map, de manera que comparten la mayoría de los métodos.

Métodos comunes a todos los mapas