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

java Map双列集合

单列集合:一次只能添加一个元素

双列集合:一次添加两个元素,左边的叫键(唯一的不能重复),右边叫值(可以重复),键和值一一对应。这样一对叫:键值对/键值对对象/在Java中叫:Entry

Map常见API

Map是个接口,不能直接new Map,要new其实现类的对象

put方法的细节:有两个作用添加和覆盖

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

remove方法:删除后会返回对应的值。

Map遍历方式

三种:键找值、键值对、lambda表达式

键找值

先获取所有的键,放到单列集合里面,再使用get方法,依次获取每个键对应的值

public class A02_MapDemo2 {public static void main(String[] args) {//Map集合的第一种遍历方式//三个课堂练习:////练习一:  利用键找值的方式遍历map集合,要求:装着键的单列集合使用增强for的形式进行遍历//练习二:  利用键找值的方式遍历map集合,要求:装着键的单列集合使用迭代器的形式进行遍历//练习三:  利用键找值的方式遍历map集合,要求:装着键的单列集合使用lambda表达式的形式进行遍历//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) {//System.out.println(key);//3.3 利用map集合中的键获取对应的值  getString value = map.get(key);System.out.println(key + " = " + value);}}
}

键值对

依次获取map里的键值对,通过get方法再依次获取里面的键和值

package com.itheima.a01mymap;import java.util.HashMap;
import java.util.Map;public class A03_MapDemo3 {public static void main(String[] args) {//Map集合的第二种遍历方式//三个课堂练习:////练习一:  通过键值对对象进行遍历map集合,要求:装着键值对对象的单列集合使用增强for的形式进行遍历//练习二:  通过键值对对象进行遍历map集合,要求:装着键值对对象的单列集合使用迭代器的形式进行遍历//练习三:  通过键值对对象进行遍历map集合,要求:装着键值对对象的单列集合使用lambda的形式进行遍历//1.创建Map集合的对象Map<String, String> map = new HashMap<>();//2.添加元素//键:人物的外号//值:人物的名字map.put("标枪选手", "马超");map.put("人物挂件", "明世隐");map.put("御龙骑士", "尹志平");/* //3.Map集合的第二种遍历方式//通过键值对对象进行遍历//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);}*///3.Map集合的第二种遍历方式//通过键值对对象进行遍历//3.1 通过一个方法获取所有的键值对对象,返回一个Set集合//3.2 遍历entries这个集合,去得到里面的每一个键值对对象for (Map.Entry<String, String> entry :  map.entrySet()) {//entry  --->  "御龙骑士","尹志平"//3.3 利用entry调用get方法获取键和值String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}}
}

lambda表达式

package com.itheima.a01mymap;import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;public class A04_MapDemo4 {public static void main(String[] args) {//Map集合的第三种遍历方式//1.创建Map集合的对象Map<String,String> map = new HashMap<>();//2.添加元素//键:人物的名字//值:名人名言map.put("鲁迅","这句话是我说的");map.put("曹操","不可能绝对不可能");map.put("刘备","接着奏乐接着舞");map.put("柯镇恶","看我眼色行事");//3.利用lambda表达式进行遍历//底层://forEach其实就是利用第二种方式进行遍历,依次得到每一个键和值//再调用accept方法map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String key, String value) {System.out.println(key + "=" + value);}});System.out.println("-----------------------------------");map.forEach((String key, String value)->{System.out.println(key + "=" + value);});System.out.println("-----------------------------------");map.forEach((key, value)-> System.out.println(key + "=" + value));}
}

HashMap

特点:是Map的实现类。无序,不重复,无索引都是指键。HashMap和HashSet的底层是一样的,都是哈希表结构

创建时,在底层创建一个长度为16,默认加载因子为0.75的数组,再利用put方法就可以添加数据了,put方法底层首先创建一个Entry对象,记录要添加的键和值,利用键计算哈希值(与要添加的值无关),确定要存入的数组索引,存入即可,如果该位置已经有元素,则调用equals方法比较的属性值,如果键里的数据一样,那么覆盖原有的Entry,键不一样则(jdk8以后)则挂在原来元素下面(链表),当链表长度超过8且数组长度>=64,则下面的链表自动转为红黑树。

LinkedHashMap

有序,不重复,无索引指的是键。有序是指:存取元素顺序一致

底层原理:底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。每添加一个元素在它们之间形成一个双向链表。

TreeMap

TreeMap和TreeSet底层一样的,都是红黑树结构

键:不重复,无索引,可排序(是指对键可排序)默认按照键从小到大排列,也可以自己指定键排序规则。

排序规则实现方法:1实现comparable接口。2创建集合时传递comparator比较器对象

相关文章:

  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十九) -> 开发云数据库
  • Spring MVC参数绑定终极手册:单多参/对象/集合/JSON/文件上传精讲
  • 【Linux】Linux文件系统详解
  • 包管理后续部分
  • Window系统程序加入白名单
  • unix/linux source 命令,在当前的 Shell 会话中读取并执行指定文件中的命令
  • 【GPT入门】第40课 vllm与ollama特性对比,与模型部署
  • Leetcode 3568. Minimum Moves to Clean the Classroom
  • 【云安全】以Aliyun为例聊云厂商服务常见利用手段
  • Java大厂后端技术栈故障排查实战:Spring Boot、Redis、Kafka、JVM典型问题与解决方案
  • Vue3.5 企业级管理系统实战(二十一):菜单权限
  • flask pyinstaller打包exe,出现module not found问题
  • 用mediamtx搭建简易rtmp,rtsp视频服务器
  • FFmpeg学习笔记
  • SDL_CreateRendererWithProperties报错Parameter ‘window‘ is invalid
  • Linux 第三阶段课程:数据库基础与 SQL 应用
  • Domain Adaptation in Vision-Language Models (2023–2025): A Comprehensive Review
  • NLP学习路线图(十四):词袋模型(Bag of Words)
  • gin 框架
  • 【Tauri2】049——upload
  • 有哪些网站可以做店面设计/app推广公司
  • 网站备案关闭影响排名/廊坊网络推广优化公司
  • wordpress文章中插入代码/百度seo优化培训
  • 网站seo快速/营销推广有哪些公司
  • 《网站开发技术》模板/常见的关键词
  • 微信上浏览自己做的网站吗/一站式媒体发布平台