valores de lista en un mapa

Barca Ventilador:

Deseo añadir a la lista de mapa, pero no puede obtener la salida deseada como un mapa. Cualquier forma de obtener la salida deseada a continuación?

    List l = new ArrayList();

    Map<String, List<Object>> mp = new HashMap();

    l.add("A");

    mp.put("1", l);

    l.clear();
    l.add("B");

    mp.put("2", l);

    System.out.println(mp);

Esperado: {1 = [A], 2 = [B]}

Reales: {1 = [B], 2 = [B]}

Nexevis:

A pesar de que se borran los valores en el list, la Mapadministración sigue haciendo referencia a la inicial list, por lo que cualquier cambio que realice en esa lista afectarán a la ubicación original también.

Echar un vistazo a este ejemplo modificado a partir de su código:

Map<String, List<Object>> mp = new HashMap<>();

for (int k = 65; k <= 91; k++) {
    List<Object> l = new ArrayList<>();
    l.add((char)k);
    mp.put(Integer.toString(k), l);
}

System.out.println(mp);

Esto imprimirá un Mapemparejamiento para cada letra Aa Zlos respectivos valores ASCII de la letra.

{66 = [B], 88 = [X], 67 = [C], 89 = [Y], 68 = [D] ... etc ...

Sin embargo lo que sucede si se cambia el código de clearla lista como que tiene en su código justo antes de la printy sólo declarar new Listfuera de una sola vez del bucle:

Map<String, List<Object>> mp = new HashMap<>();

List<Object> l = new ArrayList<>();
for (int k = 65; k <= 91; k++) {
    l.add((char)k);
    mp.put(Integer.toString(k), l);
}

l.clear();
System.out.println(mp);

Esto ahora se imprimirá la siguiente:

{66 = [], 88 = [], 67 = [], 89 = [], 68 = [], 69 = [], 90 = [] ... etc ...

Con cada Listvalor en el Mapblanco debido a que todos ellos fueron haciendo referencia a la misma lista que se borra al final.

Ahora bien, puede parecer obvio que todos ellos se pueden borrar porque en el interior del bucle no nos aclaramos el Listcada iteración y apenas añaden cada valor en el Listtodos juntos, por lo que claramente la Maphace referencia a la misma List! Sin embargo, el uso clearno tiene nada que ver con referencia a la misma listo no, sólo lo hace parecer como si no acaba de añadir todos los valores en la misma lista, pero lo hizo.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=233738&siteId=1
Recomendado
Clasificación