持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
哈喽,各位小伙伴们好,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学习,互相学习,才能成长的更快,对吧。
我是一名java开发,所以日常接触到最多的就是java啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!
一、前言
论前几期啊,我们是分别讲了Object类、Date类、FormDate类、Calendar类、System类及StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。
- java之Date类讲义
- java之DateFormat类讲义
- java之Calendar类讲义
- java之System类讲义
- java之StringBuilder类讲义
- java之Collection类
- java之包装类
- java之Iterator迭代器
- java之List集合
今天,我就要给大家讲讲一个双列集合-map。很多期内容,有小伙伴给我留言,说跟着我学,一般要看完文章才知道这一期讲了什么,所以,每一期,我都会先总结教学目标,而这期的教学目标如下:
-
能够使用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());
}
所以对于一些简单的源码,我们一定要培养自己的兴趣,去挖掘,比如就这个对象打印内容为何是一串字符串,而不是具体对象里头的内容,这就是一种专研,一种挖掘。像我们做开发,一定要培养自己的兴趣去深究代码原理。
... ...
好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。
三、文末
教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
-------------------------------------------
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
-------------------------------------------