如何让HashMap与ArrayList结合?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让HashMap与ArrayList结合?相关的知识,希望对你有一定的参考价值。

用ArrayList和HashMap实现可以多次注册用户的代码,并打印出姓李的用户
do
System.out.println("输入用户名:");
name = input.next();
System.out.println("输入密码");
password = input.next();
System.out.println("输入email");
email = input.next();
hm.put("name", name);
hm.put("password", password);
hm.put("email", email);
al.add(hm);
System.out.println("是否继续录入?(y/n)");
answer = input.next();
if(answer.equals("n"))
break;
while(true);
String a ;
HashMap hm1 = new HashMap();
for(int i=0;i<al.size();i++)
hm1 = (HashMap)al.get(i);
Set set = hm1.keySet();
a = (String)hm1.get("name");
if("li".equals(a.substring(0,2)))
for(Object key : set)
Object value = hm1.get(key);
System.out.println(key+":"+value);



为什么每次循环输入信息,al里的哈奇表都要发生变化?
比如说第一次输入的是:
name 123
password 123
email 123
这样al的0坐标存放的应该是这个哈奇表里的值
第二次输入
name 321
password 321
email 321
哈奇表将原来第一次输入的覆盖了,
al里1坐标应存放第二次输入的哈奇表里的值
但是为什么al的0坐标存放的却是最后一次输入的哈奇表里的值?
本人是新手 刚学编程 这是老师留得作业 请高手指点下 谢谢
第一次循环al里的值为:[name 123 ,password 123, email 123]
第二次循环al里的值为:[name 321 ,password 321, email 321],[name 321 ,password 321, email 321]
为什么要将上次的也改了?

参考技术A 你这样,初始化的时候
List list=new ArrayList();
每次循环的时候new HashMap记录,结束的时候
list.add(map);
然后再操作就好了本回答被提问者采纳
参考技术B 不知道你到底要什么效果,那样肯定是覆盖了啊

ArrayList与HashMap踩的坑

ArrayList与HashMap踩的坑

1. 错误的代码

package com.xrluo.type09;

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

public class Demo3
{
    public static void main(String[] args)
    {

        ArrayList<Map<String, Object>> list = new ArrayList<>();
        HashMap<String, Object> map = new HashMap<>();
        /*
            这个地方是不是可以理解为 list map都是指向一个内存的地址
         */
        map.put("key1","value1");
        map.put("key2","value2");

        /*
            {key1=value1, key2=value2}
            此处是不是可以理解为 把map的内存地址存入到list中
         */
        list.add(map);
        /*
            [{key1=value1, key2=value2}]
         */

        /*
            此处继续操作的事map的内存地址中的数据,所以会替换了上面的数据
         */
        map.put("key1","value3");
        map.put("key2","value4");
        /*
        list == [{key1=value3, key2=value4}]
        */

        list.add(map);
        /*
            list == [{key1=value3, key2=value4}, {key1=value3, key2=value4}]
        */
        System.out.println(list);
        System.out.println(map);
    }
}

2. 正确写法

package com.xrluo.type09;

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

public class Demo3
{
    public static void main(String[] args)
    {

        ArrayList<Map<String, Object>> list = new ArrayList<>();
        HashMap<String, Object> map;

        map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        list.add(map);
        /*
            [{key1=value1, key2=value2}]
         */
        map = new HashMap<>();
        map.put("key1","value3");
        map.put("key2","value4");
        /*
        list == [{key1=value1, key2=value2}]
        */

        list.add(map);
        /*
            list == [{key1=value1, key2=value2}, {key1=value3, key2=value4}]
        */
        System.out.println(list);
        System.out.println(map);
    }
}

以上是关于如何让HashMap与ArrayList结合?的主要内容,如果未能解决你的问题,请参考以下文章

ArrayList与HashMap的用法

当Arraylist增长时,带有ArrayList键的HashMap无法找到它

AR Sandbox:增强现实与互动沙盘结合,让自然科学更有趣

ArrayList、LinkedList、HashMap哪个速度更快

结合数据结构所学知识,简要说明Java语言中ArrayList,LinkedList,HashSet,HashMap四种结构各自的特点。

ArrayList与HashMap踩的坑