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

  • 个人主页: 陶然同学
  • 版权: 本文由【陶然同学】原创、在CSDN首发、需要转载请联系博主
  • 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
  •  想寻找共同成长的小伙伴,请点击【Java全栈开发社区

文章目录

集合概述

Map概述

HashMap基本使用

HashMap遍历

Map-value存储自定义类型

LinkedHashMap

Hashtable

 集合嵌套

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

准备工作【重要】

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

HashSet 的 add 判断是否重复 

HashMap 的 put 键判断是否重复

 写在最后


集合概述

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

Map概述

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

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第1张图片

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

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第2张图片

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】

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

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

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

练习: 
 使用 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 方法

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第3张图片

 2、

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第4张图片

 3、

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第5张图片

 4、 

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第6张图片

5、

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第7张图片

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

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

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第8张图片

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第9张图片

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

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

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第10张图片

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第11张图片

HashSet 的 add 判断是否重复 

 HashSet 不能存储重复元素:

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第12张图片

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

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第13张图片

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第14张图片

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第15张图片

HashMap 的 put 键判断是否重复

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

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第16张图片

 写在最后

          我们的【Java百炼成神】就结束了 欢迎大家添加博主交流 练习过程中遇到问题也可以提供支持 如果需要学习资料 博主也可以推荐

        最后 如果觉得文章对您有帮助 请给博主点赞、收藏、关注 博主会不断推出更多优质文章

【Java百炼成神】双生武魂——HashMap、LinkedHashMap、Hashtable_第17张图片

 

你可能感兴趣的:(Java百炼成神,Map,HashMap,LinkedHashMap,Hashtable,java)