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码表中对应的数字升序进行排列

相关推荐
十步杀一人_千里不留行4 分钟前
面向 C# 初学者的完整教程
开发语言·c#
C_V_Better17 分钟前
数据结构-链表
java·开发语言·数据结构·后端·链表
大阔25 分钟前
详解Intent —— 移动应用开发(安卓)
java
CodeWithMe31 分钟前
【C++】vector扩容缩容
开发语言·c++
想不明白的过度思考者33 分钟前
Java从入门到“放弃”(精通)之旅——String类⑩
java·开发语言
敖云岚35 分钟前
【LangChain4j】AI 第一弹:LangChain4j 的理解
java·人工智能·spring boot·后端·spring
xrkhy1 小时前
Collection集合,List集合,set集合,Map集合
java·数据结构·list
techdashen1 小时前
性能比拼: Go vs Java
java·开发语言·golang
24kHT1 小时前
1.1 java开发的准备工作
java·开发语言
ตาก柒Tak1 小时前
C语言五子棋项目
java·c语言·算法