java后端开发day35--集合进阶(四)--双列集合:Map&HashMap&TreeMap

(以下内容全部来自上述课程)

1.双列集合

1.1 特点

  1. 双列集合一次需要存一对数据,分别为键和值
  2. 键不能重复,值可以重复
  3. 键和值是一一对应的,每一个键只能找到自己对应的值
  4. 键+值这个整体,我们称之为"键值对"或者"键值对对象",在Java中叫做"Entry对象"

1.2 双列集合的体系:

2.Map

2.1 Map的常见API

Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的。

细节:

  1. put:添加/覆盖
    在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中,方法返回null
    在添加数据的时候,如果键是存在的,那么会把原有的键值对对象 覆盖,会把被覆盖的值进行返回。

2.2 Map的遍历方式

2.2.1 键找值

把键都获取出来放到单列集合中,再遍历集合用get方法获取值。

java 复制代码
//1.创建Map集合对象
Map<String,String> map = new HashMap<>();

//2.添加元素
map.put("尹志平","小龙女");
map.put("郭靖","穆念慈");
map.put("欧阳克","黄蓉");

//3.通过键找值
//3.1获取所有的键,把这些键放到一个单列集合中
Set<String> keys = map.keySet();
//3.2遍历单列集合,得到每一个键
for(String key:keys){
	//3.3利用map集合中的键获取对应的值 get
	String value = map.get(key);
	System.out.println(key+"="+value);
}

2.2.2 键值对

java 复制代码
//1.创建Map集合对象
Map<String,String> map = new HashMap<>();

//2.添加元素
map.put("尹志平","小龙女");
map.put("郭靖","穆念慈");
map.put("欧阳克","黄蓉");

//3.通过键值对对象进行遍历
//3.1通过一个方法获取所有的键值对对象,返回一个Set集合
Set<Map.Entry<String,String>> entries = map.entrySet();
//3.2遍历entries这个集合,去得到里面的每一个键值对对象
for(Map.Entry<String,String>> entry : entries){ //entry ---> "郭靖","穆念慈"
	//3.3利用entry调用get方法获取键和值
	String key = entry.getKey();
	String Value = entry.getValue();
	System.out.println(key+"="+value);
}

2.2.3 Lambda表达式


底层:

forEach其实就是利用第二种方式进行遍历,依次得到每一个键和值

再调用accept方法

java 复制代码
//1.创建Map集合对象
Map<String,String> map = new HashMap<>();

//2.添加元素
map.put("尹志平","小龙女");
map.put("郭靖","穆念慈");
map.put("欧阳克","黄蓉");

//3.利用lambda表达式进行遍历
map.forEach(new BiConsumer<String,String>(){
	@Override
	public void accept(String key, Sring value){
		System.out.println(key+"="+value);
}
});

System.out.println("-------------------------")

map.forEach((String key, Sring value) -> {
		System.out.println(key+"="+value);
	}
);

System.out.println("-------------------------")

map.forEach((key, value) -> System.out.println(key+"="+value));

3. HashMap

1.特点

  • HashMap是Map里面的一个实现类
  • 没有额外需要学习的特有方法,直接使用Map里面的方法就可以了。
  • 特点都是由键决定的,无序,不重复,无索引
  • HashMap跟HashSet底层原理是一模一样的,都是哈希表结构

2.底层原理

  • 依赖hashCode方法和equals方法保证键的唯一
  • 如果键存储的是自定义对象,需要重写hashCode和equals方法
  • 如果值存储自定义对象,不需要重写hashCode和equals方法

4.LinkedHashMap

  • 由键决定:有序、不重复、无索引
  • 这里的有序指的是保证存储和取出的元素顺序一致
  • 原理:底层数据结构依然是哈希表,只是每一个键值对元素又额外的多了一个双链表的机制记录存储的顺序。

5.TreeMap

5.1 特点

  • TreeMap跟TreeSet底层原理一样,都是红黑树结构的。
  • 由键决定特性:不重复、无索引、可排序
  • 可排序:对键进行排序
  • 注意:默认按照键的从小到大进行排序,也可以自己规定键的排序规则。

5.2 代码书写两种排序规则

  • 1.实现Comparable接口,指定比较规则

  • 2.创建集合时传递Comparator比较器对象,指定比较规则。

  • 两种都有以第二种为主。

  • Integer Double 默认情况下都是按照升序排列的

  • String 按照字母在ASCII码表中对应的数字升序进行排列

相关推荐
草履虫建模3 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq5 小时前
分布式系统安全通信
开发语言·c++·算法
qq_297574675 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
老毛肚5 小时前
MyBatis插件原理及Spring集成
java·spring·mybatis
学嵌入式的小杨同学5 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
lang201509285 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
Re.不晚6 小时前
Java入门17——异常
java·开发语言
缘空如是6 小时前
基础工具包之JSON 工厂类
java·json·json切换
精彩极了吧6 小时前
C语言基本语法-自定义类型:结构体&联合体&枚举
c语言·开发语言·枚举·结构体·内存对齐·位段·联合
追逐梦想的张小年6 小时前
JUC编程04
java·idea