第一章Map集合

1.1概述

现实生活中,我们常会看到这样的一个集合:IP地址与主机名,身份证号与个人,系统用户名与系统对象等。

这种一一对应的关系,就叫做映射。JAVA提供了专门的集合类用来存放这种有映射关系的对象,即java.util.Map接口。

Map集合与Collection集合存储数据的形式不同:

  • Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素方式存储
  • Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由key和value组成,通过key可以找到相应的值
  • Collection中的集合称为单列集合,Map中的集合称为双列集合
  • 需要注意的是,Map中的集合不能包含重复的key,value可以重复;每个键只能对应一个值

1.2 Map常用的子类

  • HashMap<K,V>:存储数据采用哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一,不重复,需要重写键的hashCode()方法和equals()方法。
  • LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证键的唯一,不重复,需要重写键的hashCode()方法和equals()方法。

1.3 Map接口中的常用方法

Map接口中定义了很多方法,常用如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JibBjRxo-1588355161680)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\image-20200501223654095.png)]

put方法:

private static void show1() {//创建Map集合,使用多态Map<String,String> map = new HashMap<>();String v1 = map.put("李晨", "范冰冰1");System.out.println("v1"+v1);//没有重复的key,返回nullString v2 = map.put("李晨", "范冰冰2");System.out.println("v2"+v2);//有重复的key,用新的value替换掉久的,返回被替换掉的值System.out.println(map);//{李晨=范冰冰2}map.put("丁国梁","23");map.put("王雪菲","22");map.put("黄佳玲","19");map.put("单辉","23");System.out.println(map);//key不可以重复,value可以重复
}

remove方法:

private static void show2() {//创建Map集合Map<String,Integer> map = new HashMap<>();map.put("丁国梁",23);map.put("王雪菲",22);map.put("黄佳玲",19);map.put("单辉",23);System.out.println(map);//{王雪菲=22, 丁国梁=23, 黄佳玲=19, 单辉=23}Integer v1 = map.remove("单辉");System.out.println(map);//{王雪菲=22, 丁国梁=23, 黄佳玲=19}System.out.println(v1);//  返回23,是被删除的key对应的值Integer v2 = map.remove("熊金娜");System.out.println(map);//{王雪菲=22, 丁国梁=23, 黄佳玲=19}System.out.println(v1);//  返回null,当删除不存在的key时返回null

get方法:

通过key来获取对应的值,如果key不存在返回null

1.4 Map集合遍历键找值方式

分析步骤:

1. 获取Map所有键,由于键是唯一的,所以返回一个Set集合存储所有的键,使用keyset()方法2. 遍历键的Set集合,得到每一个键
3. 根据键,获取键所对应的值。 方法:get(K key)

keyset()方法:

//遍历Map集合第一种方式:键找值方式
private static void show3() {//创建Map集合Map<String,Integer> map = new HashMap<>();map.put("丁国梁",23);map.put("王雪菲",22);map.put("黄佳玲",19);map.put("单辉",23);Set<String> s1 = map.keySet();//System.out.println(s1);for (String s : s1) {Integer v2 = map.get(s);System.out.println(s1 + "=" + v2);}
}

1.5 Entry键值对对象

在Map中一一对应的key和value被称为Entry(项)。Entry将键值对的对应关系封装成对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。

​ 既然Entry表示了一对键和值,那么也同样提供了获取对应键和对应值的方法:

  • public K getKey():获取Entry对象中的键
  • public K getValue():获取Entry对象中的值

在Map集合中也提供了获取所有Entry对象的方法:

  • public Set<Map.Entry<K,V>>entrySet():获取到Map集合中所有的键值对对象的集合(set集合)
/*** Map集合遍历的第二种方式:使用Entry对象遍历* Map集合中的方法:* public Set<Map.Entry<K,V>>entrySet():获取到Map集合中所有的键值对对象的集合(set集合)* 实现步骤:* 1.使用entrySet取Entry,存到set集合中* 2.遍历这个set集合,获取每一个Entry对象* 3.使用Entry对象中的方法getKey()和getValue获取键与值*/
public class d2MapDemo2 {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("丁国梁", 23);map.put("王雪菲", 22);map.put("黄佳玲", 19);map.put("单辉", 23);Set<Map.Entry<String, Integer>> set = map.entrySet();for (Map.Entry<String, Integer> stringIntegerEntry : set) {String key = stringIntegerEntry.getKey();Integer value = stringIntegerEntry.getValue();System.out.println(key + "=" + value);}}
}

1.6 HashMap存储自定义类型键值

  • HashMap的key参数使用自定义类时,需要在自定义类中重写hashcode和equals方法,来保证key值的唯一性

1.7 LinkedHashMap

  • 和之前学过的LinkedHashSet一样,特点使用哈希表查询速度快,且加上了链表,保证了元素的一致性
  • 在存储自定义类型键值时也需要重写hashcode和equals方法

1.8 Hashtable集合(了解即可)

第二章 补充知识点

2.1 JDK9对集合添加的优化

JDK9新特性:
List接口,Set接口,Map接口:增加了一个静态方法of,可以一次性添加多个元素
使用前提:当集合中存储的元素的个数已经确定了,不再改变时使用
注意:
1.of方法只适用于List接口,Set接口,Map接口。不适用于接口的实现类
2.of方法的返回值是一个不能改变的集合,集合不能在使用add和put方法添加元素,会抛出异常
3.Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则也会抛出异常

2.2 Debug追踪

使用IDEA的断点调试功能,查看程序的运行过程

集合框架学习笔记(下)相关推荐

  1. java集合框架学习笔记

    思维导图 一.什么是集合 存放在java.util.*.是一个存放对象的容器. 存放的是对象的引用,不是对象本身 长度不固定 只能存放对象 二.collection接口 collection的使用 增 ...

  2. 集合框架学习笔记:Collection体系和Map体系、Collections工具类

    集合框架 Java是面向对象编程,万事万物皆"对象",为了方便对"对象"进行操作,需要对"对象"进行存储,而Java集合就是存储" ...

  3. JavaSE中Map框架学习笔记

    前言:最近几天都在生病,退烧之后身体虚弱.头疼.在床上躺了几天,什么事情都干不了.接下来这段时间,要好好加快进度才好. 前面用了三篇文章的篇幅学习了Collection框架的相关内容,而Map框架相对 ...

  4. SpringMVC框架--学习笔记(下)

    接上篇:SpirngMVC框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81038382 17.全局异常处理: 系统中异常包 ...

  5. mybatis框架--学习笔记(下)

    上篇:mybatis框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81034021 8.高级映射: (1)一对一查询: ①使 ...

  6. SpringMVC框架--学习笔记(上)

    1.SpringMVC入门程序: (1)导入jar包:spring核心jar包.spring-webmvc整合Jar包 (2)配置前端控制器:web.xml文件中 <?xml version=& ...

  7. mybatis框架--学习笔记(上)

    使用JDBC操作数据库的问题总结: (1)数据库连接,使用时创建,不使用时立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能. 设想:使用数据库连接池管理数据库连接. (2) ...

  8. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

  9. JeeSite 框架学习笔记

    JeeSite 框架学习笔记 目录 JeeSite 框架学习笔记 一.全局配置 1. 获取 Resource资源实际路径 DefaultResourceLoader 2. 配置前端 js css 二. ...

  10. 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!

    从零写一个具有IOC-AOP-MVC功能的框架-学习笔记 专栏往期文章链接: IOC功能相关章节: 从零写一个具有IOC-AOP-MVC功能的框架-学习笔记-01.项目初始化 从零写一个具有IOC-A ...

最新文章

  1. 教你如何实现c#文件上传下载功能
  2. docker删除es数据_Docker的常用命令
  3. python 字符串分割和拼接_python分割和拼接字符串
  4. BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊
  5. Servlet3.0 || IDEA与tomcat的相关配置
  6. OOD面向对象设计浅谈
  7. mysql可能锁的表命令_mysql 默许是表级锁一些不太常用命令
  8. 挖矿为什么要用显卡_Conflux显卡挖矿收益很高吗?挖矿指南与核算手册
  9. 企业实战_02_Redis基础
  10. esp8266单片机透传_基于WeMos D1(ESP8266)的校园卡门禁系统
  11. 航班管家发布《民航运行周报5.10- 5.16》
  12. 预备作业03 20162316刘诚昊
  13. LeetCode 437. 路径总和 III
  14. PyTricks 翻译:Python 字典的 get() 方法和它的默认参数
  15. emu8086,汇编程序:屏幕输入字符串,设置寄存器的值
  16. nutch代码分析第一篇——综述
  17. python花瓣飘零_【动态网页】python3爬取花瓣网图片
  18. 网站服务器ftp破解,Wing FTP Server(FTP服务器)
  19. 几种常用的软件测试工具
  20. 使用layui 查询列表分页不能重置问题

热门文章

  1. Magento二次开发哪家好呢?
  2. Spring Boot 2.0.6 整合 Spring Clod Bus + Kafka
  3. oracle数据库学习笔记(二)(创建表、DDL、DML、单行插入数据、多行插入数据)
  4. ME3616-OPENCPU完整调试笔记
  5. c++复习——侯捷版
  6. Web服务器、应用服务器、数据库服务器之间的关系
  7. LSTM 08:超详细LSTM调参指南
  8. Android默认头像那些事儿
  9. node中Async模块的用法
  10. window下nginx实现图片缩放实操