【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable

举报
陶然同学 发表于 2022/06/23 01:13:06 2022/06/23
【摘要】 💂 个人主页: 陶然同学🤟 版权: 本文由【陶然同学】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦💅 想寻找共同成长的小伙伴,请点击【Java全栈开发社区】 💬推荐一款模拟面试、刷题神器👉点击跳转此网站 文章目...
  • 💂 个人主页: 陶然同学
  • 🤟 版权: 本文由【陶然同学】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
  • 💅 想寻找共同成长的小伙伴,请点击【Java全栈开发社区
  •  💬推荐一款模拟面试、刷题神器👉点击跳转此网站

文章目录

集合概述

Map概述

HashMap基本使用

HashMap遍历

Map-value存储自定义类型

LinkedHashMap

Hashtable

 集合嵌套

集合<自定义对象>-判断操作

准备工作【重要】

ArrayList的contains判断是否包含某个元素

HashSet 的 add 判断是否重复 

HashMap 的 put 键判断是否重复

 写在最后


集合概述

集合:用来保存 相同类型数据 的容器,除了保存数据,又集成了较多强大功能。 
 
我们会在下边的学习过程中,逐个学习以下集合:HashMap、LinkedHashMap、Hashtable、
 
在学习 HashMap时,完成对集合基本知识的学习,如HashMap遍历等 

Map概述

Map 集合叫做双列集合,每个元素都由“键”、“值”两部分组成

 该集合记录的是键值对 对应关系, 
通过键可以找到对应的值。比如梁山好汉的绰号与该人的对应。 

HashMap基本使用

 HashMap 和 HashSet 一样,是无序的(展示顺序和存放顺序可能不同) 
 Map(HashMap)的使用: 
 创建对象时规定键和值的数据类型。 
HashMap<键,值> 

 常用方法:

方法名 描述
put(K key,V value)  向集合中添加数据。 
添加成功,返回 null 
若键重复,则新值覆盖旧值。将被覆盖的旧值返回。 
get(Object key)  通过指定键 key 获得值 value 
若获取不到,返回 null 
remove(Object key)  移除指定 key 对应的键值,并返回值。 
clear()  清空集合 
size() 集合中键值的个数 
isEmpty() 集合是否为空 

HashMap遍历

方法名  描述
keySet()  以 Set 集合的方式获得所有键 key 
entrySet() 以 Set 集合的方式获得所有的键值对(Entry 对象) 
 
Entry 对象方法: 
获取键:getKey() 
获取值:getValue()

方式一:keySet():【快捷键:变量名.keySet().for】


   
  1. HashMap<Integer, String> map1 = new HashMap<Integer, String>();
  2. map1.put(1,"a");
  3. map1.put(2,"b");
  4. map1.put(3,"c");
  5. //1、以 set 集合方式,获取所有的 key
  6. Set<Integer> set = map1.keySet();
  7. //2、增强 for 遍历 set 集合,遍历出一个 key,就通过 get(key)方法获取 value 值
  8. for(Integer key:set){
  9. String value = map1.get(key);
  10. System.out.println("key:"+key+" value:"+value);
  11. }

方式二:entrySet():【快捷键:变量名.entrySet().for】


   
  1. HashMap<Integer, String> map1 = new HashMap<Integer, String>();
  2. map1.put(1,"a");
  3. map1.put(2,"b");
  4. map1.put(3,"c");
  5. //1、将一个键值对封装进一个 Entry 对象,获取一个装满 Entry 对象的 set 集合
  6. Set<Map.Entry<Integer, String>> set = map1.entrySet();
  7. //2、增强 for 遍历 set 集合,遍历出一个 Entry 对象,就相当于获取了一个键值对
  8. for (Map.Entry<Integer, String> entry : set) {
  9. //2.1、通过 Entry 对象的 getKey()和 getValue()获取键值对
  10. Integer key = entry.getKey();
  11. String value = entry.getValue();
  12. System.out.println("key:"+key+" value:"+value);
  13. }

练习: 
 使用 map 集合存储一个人的所有属性值,并完成遍历。

Map-value存储自定义类型

同其他集合一样,Map 的 key 或 value 都可以存储自定义类型对象: 

建议:1、使用 value 存储自定义对象。 
2、key 使用基本数据类型或 String

练习: 
 使用 map 集合存储系统属性名称与属性值。 
 使用 map 集合存储人名与个人对象,计算所有人的平均年龄,并完成遍历。 

LinkedHashMap

LinkedHashMap 是有序 Map 集合。 
是在 HashMap 的基础上添加了链表结构,通过链表结构可以保证元素的存取顺序一致;

Hashtable

Hashtable 也是 Map 集合的一种已被 HashMap 取代,在很早的传统项目中会大量见到。其与 HashMap
最大的不同: 
 Hashtable 不支持 null 作为键或值,是安全的。 
 HashMap 支持 null 作为键或值,是不安全的。

 集合嵌套

集合嵌套并不是一个新的知识点,和 if 嵌套、for 嵌套一样,仅仅是格式上的内容。 
 单列集合嵌套: 
 传智学院(List 表示)有多个分校(list 表示),每个分校有多个班级(字符串)。

 双列集合与单列集合嵌套 
 传智学院(Map 表示,key:分校名称、value:分校的班级集合)

 双列集合嵌套 
 传智学院(Map 表示,key:分校名称、value:分校信息) 
分校信息(Map 表示,key:班级名称、value 班级对象)

 要求: 
 传智学院 
 Java 基础班 001 
 001 张三 
 002 李四 
 Java 就业班 001 
 001 王五 
 002 赵六 
对以上数据进行对象的存储 
 001 张三 键值对-->定义一个 Java 基础班 001 一个 Map 集合 
 传智学院:存储的就是班级名称和班级的学生集合 
基础班 Map<学号,姓名> 
传智学院 Map<班级名称,基础班的 Map> 

集合<自定义对象>-判断操作

准备工作【重要】

集合元素若为自定义对象,需要在自定义类中选中对应方法,才能进行集合元素的判断操作。 
1、类中其他内容写完后,自动生成 HashCode 和 Equals 方法

 2、

 3、

 4、 

5、

ArrayList的contains判断是否包含某个元素

方法名 描述
boolean contains(Object obj) 判断集合中是否包含某个元素。 
 
true 表示包含 
false 表示集合中不包含该元素

 前人已经为 String、Integer 等类重写过 equals 方法,我们就不用再重写了。 
但如果集合中是自定义类,使用 contains 方法之前,则需要重写类的 equals 方法。 

例如:定义一个 Person 类(姓名 name 和 年龄 age )。 
 集合中保存三个人: 
 小明,18 
 小红,19 
 小张,20 
 现在判断 【小张,20】 和 【小明,20】 是否存在于集合中 
 要求:姓名和年龄都相同,才是同一个人 
实现:

HashSet 的 add 判断是否重复 

 HashSet 不能存储重复元素:

如果集合中是自定义类型,则必须为自定义类型重写 hashCode()和 equals()方法,HashSet 的 add 方法
才能正确去重复。

HashMap 的 put 键判断是否重复

我们知道,HashMap 中,put 重复的键,会使用新 value 替换旧 value。 
如果键是自定义类型,自定义类型必须重写 hashCode 和 equals 方法 

结束语🏆🏆🏆

🔥推荐一款模拟面试、刷题神器网站

点击链接注册即可

1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
2、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
3、大厂笔试真题:字节跳动、美团、百度、腾讯…

文章来源: blog.csdn.net,作者:陶然同学,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_45481821/article/details/124108606

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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