¿Cual es la diferencia entre las interfaces Set y Map?

publicado por: Anonymous

Quiero saber la diferencia entre usar una lista con la interface Set<> y la interface Map<> cual me resulta mejor para acceder mas fácilmente a los datos?.

solución

La diferencia es la funcionalidad definida para cada una de estas interfaces:

  • Map es una interfaz que define almacenar objetos en pares de tipo Llave (o Clave) Valor, donde puedes registrar, obtener y remover un elemento a partir de la Llave.

    Ejemplo:

    //creamos el mapa
    Map<String, Usuario> mapa = new HashMap<>();
    //agregamos elementos al mapa
    mapa.put("Luiggi Mendoza J", new Usuario(227, "Luiggi Mendoza J", 10.4k));
    mapa.put("theboshy", new Usuario(9206, "theboshy", 1));
    System.out.println(mapa.get("theboshy")); //imprime datos de usuario
    System.out.println(mapa.get("elporfirio")); //imprime nulo
    //recorrer todas las entradas llave-valor del mapa
    //e imprimir la llave y el valor correspondiente
    for (Map.Entry<String, Usuario> entry : mapa.entrySet()) {
        System.out.printf(
            "Llave: %s. Valor: %sn",
            entry.getKey(), entry.getValue());
    }
    

    Solo puede existir 1 Valor asociado a una Llave. Esto no significa que pueda haber 1 Valor asociado a múltiples Llaves. Ejemplo:

    Map<String, String> mapa = new HashMap<>();
    mapa.put("saludo", "hola mundo");
    System.out.println(mapa.get("saludo")); //imprime 'hola mundo'
    String valor = "aloha!";
    //reemplazamos el valor de la llave "saludo"
    mapa.put("saludo", valor);
    System.out.println(mapa.get("saludo")); //imprime 'aloha!'
    //asignamos el mismo valor a una nueva llave
    mapa.put("saludo efusivo", valor);
    System.out.println(mapa.get("saludo"));
    System.out.println(mapa.get("saludo efusivo"));
    //ambas sentencias imprimieros 'aloha!'
    
  • Set es una interfaz que define almacenar objetos como si fuese un conjunto matemático. Esto permite que se puedan registrar y remover elementos de este conjunto, pero no permite obtenerlos uno por uno. Set se usa principalmente para verificar que no hayan objetos repetidos en una colección.

    Ejemplo:

    Set<Integer> set = new HashSet<>();
    //agregamos elementos
    set.add(10);
    set.add(5);
    set.add(8);
    //podemos remover elementos
    set.remove(10);
    //pero no podemos obtener elementos, no existe un método `get`
    //lo que si, existe un método `contains` que permite verificar
    //si un elemento existe en el set
    if (set.contains(5)) {
        System.out.println("5 existe");
    }
    //sin embargo, se pueden recorrer todos los elementos de un set
    for (Integer elem : set) {
        System.out.println(elem);
    }
    

    Cabe resaltar que un Set puede ser visto simplemente como un Map<Object, Boolean>, donde los objetos a insertar en el Set son las llaves del Map. Esto se puede comprobar mediante el uso del método Collections#newSetFromMap(Map<E, Boolean>).

Respondido por: user227

Leave a Reply

Your email address will not be published. Required fields are marked *