java零基础入门-Map集合练习(上)

举报
喵手 发表于 2024/11/29 01:33:52 2024/11/29
【摘要】 ​一、教学目标能够使用HashMap集合实现值为双列集合存放。能够使用HashMap集合实现值为单列集合存放。能够使用HashMap集合实现值为基本数据类型存放。能够使用HashMap集合实现值为对象存放。...二、HashMap实现自定义元素存放1、值存放基本数据类型        像这中就非常简单了呀,比如存放HashMap<String,Integer>,HashMap<Integer...

一、教学目标

  • 能够使用HashMap集合实现值为双列集合存放。
  • 能够使用HashMap集合实现值为单列集合存放。
  • 能够使用HashMap集合实现值为基本数据类型存放。
  • 能够使用HashMap集合实现值为对象存放。
  • ...

二、HashMap实现自定义元素存放

1、值存放基本数据类型

        像这中就非常简单了呀,比如存放HashMap<String,Integer>,HashMap<Integer,String>,HashMap<Integer,Double>等双基本类型存储。

演示代码如下:

    /**
     * 通过map.entrySet()方法遍历map
     */
    @Test
    public void testMapByEntrySet() {

        //创建一个map集合容器
        Map<String, String> map = new HashMap<>();

        //添加元素
        map.put("黄忠", "射手");
        map.put("吕布", "战士");
        map.put("妲己", "法师");

        //获取所有的entry对象
        Set<Map.Entry<String, String>> entrySet = map.entrySet();

        //键值对方式遍历
        for (Map.Entry<String, String> entry : entrySet) {
            //解析entry对象
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "所对应的值为:" + value);
        }
    }

演示代码运行结果展示:

吕布所对应的值为:战士
妲己所对应的值为:法师
黄忠所对应的值为:射手

2、值存放对象。

        对于HashMap<String,Object>,日常开发也经常会有的。其中Object对象可以是一个pojo类,一个实体Entity类等。比如我定义一个HashMap<String,UserEntity>,对于这种数据结构的map,我们来试试遍历,看看它是如何用的。

演示代码如下:

    /**
     * 遍历值为对象的map集合
     */
    @Test
    public void testMapForByObject() {

        //创建一个map集合容器
        Map<String, UserEntity> map = new HashMap<>();

        //添加元素
        map.put("1", new UserEntity(1, "赵云", 30));
        map.put("2", new UserEntity(2, "貂蝉", 10));
        map.put("3", new UserEntity(3, "李白", 20));
        map.put("4", new UserEntity(4, "黄忠", 60));

        //获取所有的entry对象
        Iterator<Map.Entry<String, UserEntity>> iterator = map.entrySet().iterator();

        //Iterator迭代器
        while (iterator.hasNext()) {
            Map.Entry<String, UserEntity> next = iterator.next();

            System.out.println(next.getKey() + "所对应的值为:" + next.getValue());
        }
    }

演示代码运行结果展示:

1所对应的值为:id=1 ,name=赵云 ,age=30
2所对应的值为:id=2 ,name=貂蝉 ,age=10
3所对应的值为:id=3 ,name=李白 ,age=20
4所对应的值为:id=4 ,name=黄忠 ,age=60

        其中对于UserEntity对象,为何能打印其对象具体内容,因为我这是重写了toString(),像你们如果直接创建的对象且就这样直接进行对象遍历输出,next.getValue()所获取到的值且打印的出来的就是其对象的内存地址,所以如果你想具体打印其对象的内容,你们可以在你们所定义的实体类中重写toString方法即可。比如如下我的,仅供参考:

    @Override
    public String toString() {
        return "id=" + this.id + " ," + "name=" + this.name + " ," + "age=" + this.getAge();
    }

        打印格式这个不固定的哈,你们根据自己的喜好随意定义,不用说就必须跟我的一样,这你们可明白,我一直教学的角度都是推崇学生发挥自主的想法去做去实现,而不是死板的只会按部就班,我也是会经常看些博主大佬写的文章,学习的只是人家写的思想,而不是连演示代码都敲一直,这样学出来的东西,就不是自己的,你这就等于在抄袭!我们要学的是代码思想,好不好。 

        演示代码已写好,那我们就来执行一下看看,给大家演示一下,如果我去掉对重写toString方法 。看看实际值打印会是啥?验证一下我上述说的结论对不对。

        你们可以看到,值都是这种com.example.demo.entity.UserEntity@e0f2686,这就是打印的该对象的内存地址,至于为啥会打印内存地址,你们请看java.lang.Object类中toString的源码。我也不是凭空捏造,如下:

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

        所以对于一些简单的源码,我们一定要培养自己的兴趣,去挖掘,比如就这个对象打印内容为何是一串字符串,而不是具体对象里头的内容,这就是一种专研,一种挖掘。像我们做开发,一定要培养自己的兴趣去深究代码原理。 

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。