当前位置: 首页 > backend >正文

java后端开发day35--集合进阶(四)--双列集合:MapHashMapTreeMap

请添加图片描述
(以下内容全部来自上述课程)
在这里插入图片描述

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方法获取值。

//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集合中的键获取对应的值 getString value = map.get(key);System.out.println(key+"="+value);
}

2.2.2 键值对

//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方法

//1.创建Map集合对象
Map<String,String> map = new HashMap<>();//2.添加元素
map.put("尹志平","小龙女");
map.put("郭靖","穆念慈");
map.put("欧阳克","黄蓉");//3.利用lambda表达式进行遍历
map.forEach(new BiConsumer<String,String>(){@Overridepublic 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码表中对应的数字升序进行排列

http://www.xdnf.cn/news/1491.html

相关文章:

  • leetcode 二分查找应用
  • Linux/AndroidOS中进程间的通信线程间的同步 - IPC方式简介
  • Podman Desktop:现代轻量容器管理利器(Podman与Docker)
  • 基于stm32的智能门锁系统
  • ecovadis评估注意事项?ecovadis评估过程需要多长时间
  • gem5-gpu教程05 内存建模
  • 46. 全排列
  • Prisma JSON存储扩展性
  • 1.6软考系统架构设计师:架构师的角色与能力要求 - 练习题附答案及超详细解析
  • OpenCV图像轮廓示例
  • 如何创建GitLab 合并请求?
  • 【每日八股】复习 MySQL Day2:索引
  • 【Java面试笔记:基础】10.如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?
  • 前缀和相似题共赏
  • 文件自动备份
  • 共建安全可控大模型AI底座,助力国产化升级——麒麟信安与新智惠想达成战略合作
  • 2025.04.23华为机考第一题-100分
  • Redis高频核心面试题
  • go中redis使用的简单介绍
  • 利用HandlerMethodArgumentResolver和注解解析封装用户信息和Http参数
  • Postman设置了Cookies但是请求不携带Cookie
  • Java | 深拷贝与浅拷贝工具类解析和自定义实现
  • 今日行情明日机会——20250423
  • 协程gevent案例
  • 从代码学习深度学习 - 自动并行 PyTorch 版
  • AI飞行行为的可解释性与合规审计机制设计
  • React SSR + Redux 导致的 Hydration 报错踩坑记录与修复方案
  • 亚信安全与联通数科达成战略合作,成立联信事业部
  • 深入学习Axios:现代前端HTTP请求利器
  • flex修改主轴方向