valores de lista em um mapa

Barca Fan:

Desejo acrescentar lista de mapa, mas incapaz de obter o resultado desejado como um mapa. Qualquer maneira de obter a saída abaixo desejado?

    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]}

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

Nexevis:

Mesmo que você limpar os valores no list, a Mapainda está referenciando o original list, de modo que todas as alterações feitas a essa lista vai afetar o local original também.

Dê uma olhada neste exemplo modificado a partir do seu 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);

Isto irá imprimir um Mapemparelhamento para cada letra Apara Zcom os respectivos valores ASCII para a letra.

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

No entanto o que acontece se você alterar o código para cleara lista como você tem no seu código logo antes da printe só declarar um new Listfora de uma única vez do loop:

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);

Isto irá agora imprimir esta:

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

Com cada Listvalor no Mapbranco porque eles estavam todos fazendo referência a mesma lista que foi liberado no final.

Agora, pode parecer óbvio que todos iriam ser limpo porque dentro do loop não limpar a Listcada iteração e apenas adicionados a cada valor no Listtodos juntos, então claramente o Mapestá referenciando o mesmo List! No entanto, usando clearnão tem nada a ver com referenciando o mesmo listou não, ele só faz isso parecer como se não basta adicionar todos os valores na mesma lista, mas você fez.

Acho que você gosta

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