Colecciones y Generics

Framework de colecciones

El Framework de Colecciones en Java proporciona clases e interfaces para trabajar con colecciones de objetos de manera más eficiente.

Interfaces Principales

  • List: Una colección ordenada que puede contener elementos duplicados. Ejemplos: ArrayList, LinkedList.
  • Set: Una colección que no permite elementos duplicados. Ejemplos: HashSet, TreeSet.
  • Map: Una colección de pares clave-valor, donde cada clave es única. Ejemplos: HashMap, TreeMap.

Ejemplo de Uso

				
					import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FrameworkColecciones {
    public static void main(String[] args) {
        // Crear una lista
        List<String> lista = new ArrayList<>();
        lista.add("Manzana");
        lista.add("Banana");
        lista.add("Naranja");

        // Crear un mapa
        Map<Integer, String> mapa = new HashMap<>();
        mapa.put(1, "Rojo");
        mapa.put(2, "Verde");
        mapa.put(3, "Azul");

        // Iterar sobre la lista
        System.out.println("Elementos de la lista:");
        for (String elemento : lista) {
            System.out.println(elemento);
        }

        // Iterar sobre el mapa
        System.out.println("\nElementos del mapa:");
        for (Map.Entry<Integer, String> entry : mapa.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

				
			

Resumen

  • El Framework de Colecciones en Java proporciona interfaces y clases para trabajar con colecciones de objetos de manera eficiente.
  • Las interfaces principales son List, Set y Map, con implementaciones como ArrayList, HashSet, HashMap, etc.
  • Las colecciones te permiten almacenar, recuperar y manipular datos de manera flexible en Java.

List, Set, Map

En Java, List, Set y Map son interfaces del Framework de Colecciones que proporcionan diferentes formas de almacenar y manipular conjuntos de elementos.

List

  • List es una colección ordenada que permite elementos duplicados.
  • Las implementaciones comunes son ArrayList y LinkedList.
				
					import java.util.ArrayList;
import java.util.List;

public class ListaEjemplo {
    public static void main(String[] args) {
        // Crear una lista
        List<String> lista = new ArrayList<>();
        
        // Agregar elementos a la lista
        lista.add("Manzana");
        lista.add("Banana");
        lista.add("Naranja");
        
        // Acceder a elementos por índice
        String primeraFruta = lista.get(0);
        System.out.println("Primera fruta: " + primeraFruta);
        
        // Iterar sobre la lista
        for (String fruta : lista) {
            System.out.println(fruta);
        }
    }
}

				
			

Set

  • Set es una colección que no permite elementos duplicados.
  • Las implementaciones comunes son HashSet y TreeSet.
				
					import java.util.HashSet;
import java.util.Set;

public class SetEjemplo {
    public static void main(String[] args) {
        // Crear un set
        Set<String> set = new HashSet<>();
        
        // Agregar elementos al set
        set.add("Rojo");
        set.add("Verde");
        set.add("Azul");
        set.add("Rojo"); // Duplicado
        
        // Iterar sobre el set
        for (String color : set) {
            System.out.println(color);
        }
    }
}

				
			

Map

  • Map es una colección de pares clave-valor donde cada clave es única.
  • Las implementaciones comunes son HashMap y TreeMap.
				
					import java.util.HashMap;
import java.util.Map;

public class MapaEjemplo {
    public static void main(String[] args) {
        // Crear un mapa
        Map<String, Integer> mapa = new HashMap<>();
        
        // Agregar elementos al mapa
        mapa.put("Uno", 1);
        mapa.put("Dos", 2);
        mapa.put("Tres", 3);
        
        // Acceder a un valor por clave
        int valor = mapa.get("Dos");
        System.out.println("Valor de 'Dos': " + valor);
        
        // Iterar sobre las entradas del mapa
        for (Map.Entry<String, Integer> entry : mapa.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

				
			

Uso de Generics

Los generics en Java te permiten crear clases, interfaces y métodos que pueden trabajar con diferentes tipos de datos de manera segura y sin necesidad de hacer casting.

Sintaxis de Generics

				
					import java.util.ArrayList;
import java.util.List;

public class GenericsEjemplo {
    public static void main(String[] args) {
        // Uso de generics con ArrayList
        List<String> listaString = new ArrayList<>();
        listaString.add("Hola");
        listaString.add("Mundo");
        
        List<Integer> listaEnteros = new ArrayList<>();
        listaEnteros.add(1);
        listaEnteros.add(2);
        
        // Uso de generics con métodos
        String resultadoString = obtenerPrimerElemento(listaString);
        Integer resultadoEntero = obtenerPrimerElemento(listaEnteros);
        
        System.out.println("Primer elemento de listaString: " + resultadoString);
        System.out.println("Primer elemento de listaEnteros: " + resultadoEntero);
    }
    
    // Método genérico que devuelve el primer elemento de una lista
    public static <T> T obtenerPrimerElemento(List<T> lista) {
        return lista.get(0);
    }
}

				
			

En este ejemplo:

  • Se crea una lista ArrayList que almacena cadenas de texto y otra que almacena enteros.
  • Se define un método genérico obtenerPrimerElemento() que puede trabajar con cualquier tipo de lista.

Ventajas de Generics

  • Seguridad de Tipo: Los generics proporcionan comprobación de tipos en tiempo de compilación, lo que evita errores de tipo en tiempo de ejecución.
  • Reutilización de Código: Permite escribir código genérico que puede ser reutilizado con diferentes tipos de datos.
  • Mayor Legibilidad: Mejora la legibilidad del código al indicar claramente los tipos de datos que se están utilizando.