第三阶段 JAVA常见对象的学习
集合框架——Map集合
在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息。今天我们所介绍的Map集合就可以很好的帮助我们实现这种需求
(一) 概述及功能
(1) 概述
Map是一种存储元素对的集合(元素对分别称作 键 和 值 也称键值对)它将键映射到值的对象。一个映射不能包含重复的键,并且每个键最 多只能映射到一个值。
怎么理解呢?
键 (key):就是你存的值的编号 值 (value):就是你要存放的数据
你可以近似的将键理解为下标,值依据键而存储,每个键都有其对应值。这两者是1、1对应的
但在之前下标是整数,但是Map中键可以使任意类型的对象。
Map集合和Collection集合的区别?
- Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的
- Collection集合存储元素是单独出现的,Collection的子类Set是唯一的,List是可重复的。
- Map集合的数据结构值针对键有效,跟值无关,Collection集合的数据结构是针对元素有效
(2) 功能
A:添加功能
//添加元素
B:删除功能
//移除所有的键值对元素
C:判断功能
//判断集合是否包含指定的键
D:获取功能
//将map集合中的键和值映射关系打包为一个对象
E:长度功能
//返回集合中的键值对的对数
(二) Map集合的遍历
package
(三) Map及子类总结
Map(双列集合)
- Map集合的数据结构仅仅针对键有效,与值无关。
- 存储的是键值对形式的元素,键唯一,值可重复
HashMap
- 底层数据结构是哈希表,线程不安全,效率高
- 哈希表依赖两个方法:hashCod()和equals()
- 执行顺序:
- 首先判断hashCode()值是否相同
- 是:继续执行equals(),看其返回值
- 是true:说明元素重复,不添加
- 是false:就直接添加到集合
- 是:继续执行equals(),看其返回值
- 首先判断hashCode()值是否相同
-
-
- 否:就直接添加到集合
-
- 最终:
- 自动生成hashCode()和equals()即可
LinkeHashMap
- 底层数据结构是由链表和哈希表组成
- 由链表保证元素有序
- 由哈希表保证元素唯一
Hashtable
- 底层数据结构是哈希表
- 哈希表依赖两个......自动生成hashCode()和equals()即可
TreeMap
- 底层数据结构是红黑树(是一种自平衡的二叉树)
如何保证元素唯一性呢?
- 根据比较的返回值是否是0来决定
如何保证两种元素的排序呢?
- 自然排序(元素具备比较性)
- 让元素所属的类实现comparable接口
- 比较器排序(集合具备比较性)
- 让集合接收一个comparator的实现类对象
可以多层嵌套
HashMap集合嵌套HashMap
HashMap集合嵌套ArrayList
ArrayList集合嵌套HashMap
HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>
1:Hashtable和HashMap的区别?
Hashtable:线程安全,效率低。不允许null键和null值
HashMap:线程不安全,效率高。允许null键和null值
(其实HashMap就是用来替代Hashtable的,就像ArrayList替代vector一样)
2:List,Set,Map等接口是否都继承子Map接口?
List,Set不是继承自Map接口,它们继承自Collection接口
Map接口本身就是一个顶层接口
需要排序:TreeMap
不需要排序:HashMap
不知道具体需求:HashMap
(四) 经典案例
(1) 统计字符串中字符出现的次数
import
(2) 模拟斗地主案例
在讲解这个案例之前,我们先来了解一个我们下面案例中所需要知道的知识点
Collections 工具类
Collections:是针对集合进行操作的工具类,都是静态方法。
面试题:
Collection和Collections的区别?
Collection:是单列集合的顶层接口,有子接口List和Set。(Map是双列的)
Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法
Collections的静态方法
//排序 默认情况下是自然顺序。
//斗地主案例代码
结尾:
如果内容中有什么不足,或者错误的地方,欢迎大家给我留言提出意见, 蟹蟹大家 !^_^
如果能帮到你的话,那就来关注我吧!(系列文章均会在公众号第一时间更新)
在这里的我们素不相识,却都在为了自己的梦而努力 ❤
一个坚持推送原创Java技术的公众号:理想二旬不止