Java Map集合、集合的嵌套

一. 概述

        1. Map集合称为双列集合,格式:{key1=value1, key2=value2,.....},一次需要存一对数据作为一个元素。

        2. Map集合的每个元素"key=value"称为一个键值对/键值对对象/一个Entry对象,Map集合也被称为"键值对集合"。

        3. Map集合的所有键是不允许重复的,但值可以重复,键和值是一一对应的,每一个键只能找到对于的值。

                ① HashMap(由键决定特点):无序、不重复、无索引。(用的最多)

                ② LinkedHashMap(由键决定特点):有序、不重复、无索引

                ③ TreeMap(由键决定特点):按照大小默认升序排序、不重复、无索引

public static void main(String[] args) {Map<String, String> map = new HashMap();map.put("1", "1");map.put("1", "2");map.put("卡莎", "泰坦");map.put("霞", "泰坦");map.put(null, null);//无序、不重复、无索引System.out.println(map);//{null=null, 1=2, 卡莎=泰坦, 霞=泰坦}Map<Integer, String> map1 = new TreeMap<>();map1.put(1, "张飞");map1.put(5, "霞");map1.put(3, "洛");map1.put(2, "璐璐");按照大小默认升序排序、不重复、无索引System.out.println(map1);//{1=张飞, 2=璐璐, 3=洛, 5=霞}}

二. Map常用方法

        1. Map是所有双列集合的父类,他的方法是所有双列集合都可以继承使用的。

public int size()获取集合大小
public void clear()清空集合
public boolean isEmpty()判断集合是否为空,为空则返回true,否则返回false
public V get (Object key)根据键获取值
public V remove(Object key)根据键删除元素,返回被删除元素的值
public boolean containsKey(Object key)判断是否包含某个键,包含则返回true否则返回false
public boolean containsValue(Object value)判断是否包含某个值,包含则返回true否则返回false
public Set<K> keySet()获取map集合的全部键
public Collection<V> values()获取map集合的全部值

putAll(map)

把其他Map集合的数据全部放入一个集合中

public static void main(String[] args) {Map<String, String> map = new HashMap();map.put("1", "1");map.put("1", "2");map.put("卡莎", "泰坦");map.put("霞", "泰坦");map.put(null, null);//无序、不重复、无索引System.out.println(map);//{null=null, 1=2, 卡莎=泰坦, 霞=泰坦}//1. public int size()	获取集合大小System.out.println(map.size());//4//2. public void clear()	清空集合map.clear();//3. public boolean isEmpty()	判断集合是否为空,为空则返回true,否则返回falseSystem.out.println(map.isEmpty());//true//4. public V get (Object key)	根据键获取值map.put("1", "1");map.put("卡莎", "泰坦");map.put("霞", "泰坦");System.out.println(map.get("卡莎"));//泰坦//5. public V remove(Object key)	根据键删除元素,返回被删除元素的值System.out.println(map.remove(1));//nullSystem.out.println(map.remove("1"));//1//6. public boolean containsKey(Object key)	判断是否包含某个键,包含则返回true否则返回falseSystem.out.println(map.containsKey("霞"));//true//7. public boolean containsValue(Object value)	判断是否包含某个值,包含则返回true否则返回falseSystem.out.println(map.containsValue("泰坦"));//true//8. public Set<K> keySet()	获取map集合的全部键Set<String> set = map.keySet();System.out.println(set);//[1, 卡莎, 霞]//9. public Collection<V> values()	获取map集合的全部值Collection<String> c = map.values();System.out.println(c);//10. 把其他Map集合的数据全部放入一个集合中Map<String, String> map2 = new HashMap<>();map2.putAll(map);System.out.println(map2);//{霞=泰坦, 卡莎=泰坦}}

三. Map集合的遍历方式

        1. 键找值:先获取Map集合全部的键,在通过遍历键来找值。

方法名称说明
public Set<K> keySet()获取所有键的集合
public V get(Object key)根据键获取对应的值

        2. 键值对:把"键值对"看成一个整体进行遍历

方法名称说明
Set<Map.Entry<K,V>> entrySet()获取所有“键值对”的集合
K getKey()获取键
V getValue()获取值

        3. Lambda:JDK8开始之后的新技术。

方法名称说明
default void forEach(BiConsumer<? super K, ? super V> action)结合lambda遍历map集合
public static void main(String[] args) {//map集合的遍历方法//1. 键找值:先获取Map集合全部的键,在通过遍历键来找值。Map<String, String> map = new HashMap();map.put("1", "1");map.put("2", "2");map.put("卡莎", "泰坦");map.put("霞", "洛");// public Set<K> keySet()	获取所有键的集合// public V get(Object key)	根据键获取对应的值Set<String> set = map.keySet();for (String key : set) {System.out.println(key + "---->" + map.get(key));}//2. 键值对:把"键值对"看成一个整体进行遍历//Set<Map.Entry<K,V>> entrySet()	获取所有“键值对”的集合Set<Map.Entry<String, String>> entries = map.entrySet();for (Map.Entry<String, String> entry : entries) {//K getKey()	获取键//V getValue()	获取值System.out.println(entry.getKey() + "---->" + entry.getValue());}//3.Lambda:JDK8开始之后的新技术。//default void forEach(BiConsumer<? super K, ? super V> action)	结合lambda遍历map集合map.forEach((key, value) -> {System.out.println(key + "---->" + value);});}

四. HashMap 集合

        0. 方法基本都是继承Map集合

        1. HashMap(由键决定特点):无序(添加的元素顺序与获取出的数据顺序可能不一样)、不重复、无索引。(用的最多);是一种增删改查数据性能都较好的集合

        2. HashMap底层原理:HashMap跟HashSet的底层原理是一模一样的,都是基于哈希表实现的;Set系列集合的底层原理就是基于Map实现的,只是Set集合中的元素只要键数据,不要值数据。

        3. 哈希表是一种增删改查数据性能都较好的数据结构。JDK8之前哈希表=数组+链表;JDK8之后:数组+链表+红黑树

        4. HashMap的键依赖hashCode()方法和equals()方法保证键的唯一;如果存储的自定义类型的对象,可以通过重写hashCode()方法和equals()方法,保证多个对象内容一样时,HashMap集合就能认为是重复的数据。

五. LinkdeHashMap 集合

        0.  方法基本都是继承Map集合

        1.  LinkedHashMap(由键决定特点):有序(添加的元素顺序与获取出的数据顺序一样)、不重复、无索引

        2.  底层原理:底层数据结构依然是基于哈希表实现的,只是每一个键值对元素又额外多了一个双链表的机制记录元素顺序;LinkedHashSet集合的底层原理就是LinkedHashMap

六. TreeMap 集合

        0. 方法基本都是继承Map集合

        1. TreeMap(由键决定特点):按照大小默认升序排序、不重复、无索引

        2. 底层原理:TreeMap跟TreeSet集合的底层原理是一样的,都是基于红黑树实现的排序。

        3. TreeMap集合也支持两种方式来指定排序规则

                ① 让类实现Comparable接口,重写比较规则

                ② TreeMap集合有一个有参数构造器,支持创建Comparator比较器对象,指定比较规则

//方式1. Comparable:让该类对象实现Comparable(比较规则)接口,然后重写compareTo方法,自己制定比较规则
public class Student implements Comparable<Student>{private String name;private int age;private double score;public Student() {}public Student(String name, int age, double score) {this.name = name;this.age = age;this.score = score;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", score=" + score +'}';}@Overridepublic int compareTo(Student o) {//左边对象 大于 右边对象 返回正整数//左边对象 小于 右边对象 返回负整数//左边对象 等于 右边对象 返回0//如按照成绩排序 默认升序/*if (this.score > o.score) {return 1;}else if (this.score < o.score) {return -1;}else {return 0;}*/return Double.compare(this.getScore(), o.getScore());//升序//降序的话://左边对象 大于 右边对象 返回负整数//左边对象 小于 右边对象 返回正整数//左边对象 等于 右边对象 返回0/* if (this.score > o.score) {return -1;}else if (this.score < o.score) {return 0;}else {return 0;}return Double.compare(o.getScore(), this.getScore());//降序*/}
}
public static void main(String[] args) {Map<Student, String> m = new TreeMap();Student student = new Student("卡莎", 18, 99);Student student1 = new Student("泰坦", 19, 93);Student student2 = new Student("伊泽", 16, 98);Student student3 = new Student("璐璐", 14, 96);m.put(student,"虚空之女");m.put(student1,"深海泰坦");m.put(student2,"探险家");m.put(student3,"仙灵女巫");//1. 让类实现Comparable接口,重写compareTo比较规则System.out.println(m);//2. TreeMap集合有一个有参数构造器,支持创建Comparator比较器对象,指定比较规Map<Student, String> m2 = new TreeMap(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o1.getAge() - o2.getAge();}});//Map<Student, String> m2 = new TreeMap<>(( o1,  o2)-> o1.getAge() - o2.getAge());m2.putAll(m);System.out.println(m2);}

 七. 集合的嵌套

        1. 集合的嵌套指的是集合中的元素又是一个集合。

public static void main(String[] args) {//集合的嵌套 map嵌套ArrayListMap<String, List<String>> map = new HashMap();List<String> list = new ArrayList();list.add("东城区");list.add("西城区");list.add("朝阳区");list.add("丰台区");list.add("石景山区");list.add("海淀区");list.add("海淀区");map.put("北京市", list);List<String> list2 = new ArrayList();Collections.addAll(list2,"石家庄", "唐山", "秦皇岛", "邯郸");map.put("河北省", list2);//遍历map.forEach( (k,v) -> {System.out.println(k + "--->" + v);});
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring防止重复点击,两种注解实现(AOP)

第一种&#xff1a;EasyLock 简介 为了简化可复用注解&#xff0c;自己实现的注解&#xff0c;代码简单随拿随用 使用方式 1.创建一个注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface EasyLock {long waitTime() default …

微服务拆分的艺术:构建高效、灵活的系统架构

目录 一、微服务拆分的重要性 二、微服务拆分的策略 1. 按照业务领域拆分 2. 按照团队结构拆分 3. 按照业务边界拆分 4. 按照数据和数据库拆分 5. 按照用户界面或外部接口拆分 6. 按照功能模块或领域驱动设计拆分 7. 按照性能和可伸缩性需求拆分 三、微服务拆分的实践…

中建海龙:科技助力福城南产业片区绿色建筑发展

在快速发展的城市化进程中&#xff0c;绿色建筑以其环保、节能、可持续的特点日益受到重视。作为建筑工业化领域的领军企业&#xff0c;中建海龙科技有限公司&#xff08;简称“中建海龙”&#xff09;凭借其卓越的科技实力和创新举措&#xff0c;在推动绿色建筑发展方面做出了…

大模型数据采集和预处理:把所有数据格式,word、excel、ppt、jpg、pdf、表格等转为数据

大模型数据采集和预处理&#xff1a;把所有数据格式&#xff0c;word、excel、ppt、jpg、pdf、表格等转为数据 文本/图片/表格&#xff0c;分别提取处理工具选择不同格式文件&#xff0c;使用不同工具处理1. 确认目标2. 分析过程(目标-手段分析法)3. 实现步骤4. 代码封装效果展…

三甲医院等级评审八维数据分析应用(五)--数据集成与共享篇

一、引言 1.1 研究背景与意义 随着医疗卫生体制改革的不断深化以及信息技术的飞速发展,三甲医院评审作为衡量医院综合实力与服务水平的重要标准,对数据集成与共享提出了更为严苛的要求。在传统医疗模式下,医院内部各业务系统往往各自为政,形成诸多“信息孤岛”,使得数据…

论文泛读《LPFHE: Low-Complexity Polynomial CNNs for Secure Inference over FHE》

文章目录 1、摘要2、介绍3、文章结构4、总结 1、摘要 Machine learning as a service (MLaaS) 在客户中越来越受欢迎。为了解决 MLaaS 中的隐私问题&#xff0c;引入了 FHE 来保护客户端的数据。  然而&#xff0c;FHE 不能直接评估 卷积神经网络 (CNNs) 中的非算数激活函数。…

Redission红锁

目录 一、什么是红锁 二、Redission红锁的使用 一、什么是红锁 Redis 的作者 Salvatore Sanfilippo&#xff08;又名 antirez&#xff09;提出的一种基于多个 Redis 实例实现分布式锁的算法。红锁&#xff08;Redlock&#xff09;旨在解决单点故障问题&#xff0c;即当使用单…

VTK 鼠标+键盘重构

1、鼠标事件 如果有鼠标事件处理等相应的需求,可以重写该事件。 void OnMouseMove() override; //鼠标移动事件 void OnLeftButtonDown() override;//左键按下事件 void OnLeftButtonUp() override;//左键抬起事件 void OnMiddleButtonDown() override;//滚轮按下事件 …

ELK 使用教程采集系统日志 Elasticsearch、Logstash、Kibana

前言 你知道对于一个系统的上线考察&#xff0c;必备的几样东西是什么吗&#xff1f;其实这也是面试中考察求职者&#xff0c;是否真的做过系统开发和上线的必备问题。包括&#xff1a;服务治理(熔断/限流) (opens new window)、监控 (opens new window)和日志&#xff0c;如果…

node内置模块之---path 模块

path 模块的作用 path 模块是 Node.js 的核心模块之一&#xff0c;提供了用于处理和转换文件路径的功能。它能帮助你在不同操作系统间处理文件路径时避免平台差异&#xff08;如 Windows 和 Unix 系统使用不同的路径分隔符&#xff09; path 模块api介绍 使用场景&#xff1a; …

STM32G0B1 can Error_Handler 解决方法

问题现象 MCU上电&#xff0c;发送0x13帧数据固定进入 Error_Handler 硬件介绍 MCU :STM32G0B1 can:NSI1042 tx 接TX RX 接RX 折腾了一下午&#xff0c;无解&#xff0c;问题依旧&#xff1b; 对比测试 STM32G431 手头有块G431 官方评估版CAN 模块&#xff1b; 同样的…

在ros2 jazzy和gazebo harmonic下的建图导航(cartographer和navigation)实现(基本)

我的github分支&#xff01;&#xff01;&#xff01; 你可以在这里找到相对应的源码。 DWDROME的MOGI分支 来源于&#xff01;&#xff01; MOGI-ROS/Week-3-4-Gazebo-basics 学习分支整理日志 分支概述 这是一个用于个人学习的新分支&#xff0c;目的是扩展基本模型并添加…

Redis 实现分布式锁

文章目录 引言一、Redis的两种原子操作1.1 Redis 的原子性1.2 单命令1.3 Lua 脚本1.4 对比单命令与 Lua 脚本 二、Redis 实现分布式锁2.1 分布式锁的概念与需求2.1.1 什么是分布式锁&#xff1f;2.1.2 分布式锁的常见应用场景 2.2 基于 Redis 的分布式锁实现2.2.1 锁的获取与释…

区块链与微服务研究报告

摘要 区块链与微服务架构的结合为现代企业级应用提供了新的解决方案。区块链技术以其不可篡改性和透明性&#xff0c;解决了微服务在分布式环境下的数据一致性和安全性问题。本文将探讨区块链与微服务的基本概念、技术原理、应用案例以及未来研究方向。 1. 引言 随着信息技术…

SAP MM物料管理模块常见BAPI函数清单

【SAP系统研究】 #SAP #MM #物料管理 #函数 #BAPI 1、物料主数据 BAPI_MATERIAL_SAVEDATA 创建/更改物料主数据 BAPI_MATERIAL_SAVEREPLICA 物料主数据视图扩充 BAPI_MATERIAL_EXISTENCECHECK 检查物料主数据是否存在 BAPI_MATERIAL_GETLIST 显示物料主数据明细 BAPI_MATERIALG…

Stable Diffusion和Midjourney有什么区别?

Stable Diffusion 和 Midjourney 主要有以下区别&#xff1a; 目录 费用与可访问性 设备要求 安装与使用 学习成本 图像生成效果 可控性与定制性 私密性 费用与可访问性 Stable Diffusion&#xff1a;开源免费&#xff0c;任何人都可以免费下载并自行部署使用&#xf…

104周六复盘 (188)UI

1、早上继续看二手书的一个章节&#xff0c;程序开发流程、引擎、AI等内容&#xff0c; 内容很浅&#xff0c;基本上没啥用&#xff0c;算是复习。 最大感触就是N年前看同类书的里程碑、AI相关章节时&#xff0c;会感觉跟自己没啥关系&#xff0c; 而如今则密切相关&#xf…

Mono里运行C#脚本23—mono_jit_exec

前面已经分析一部分代码,可以打下基础知识,当然还有很多其它部分的内容,没有深入去了解。 接着下来,我们去探索一下怎么样找到执行应用程序的入口。 在这个嵌入脚本程序里,有一个这样的函数调用: main_function (domain, file, argc - 1, argv + 1); 这个函数的作用,…

浅谈分布式共识算法

分布式共识算法 基础概念1、容错2、共识3、拜占庭将军问题4、多数派5、共识算法分类6、ACID&BASE&CAP Paxos1、相关概念2、三种角色3、运行阶段4、Multi Paxos5、总结6、演化 ZAB1、相关概念2、三种角色3、成员状态4、运行阶段5、ZooKeeper流程6、总结 Raft1、相关概念…

你喜欢看哪类的网上视频教程?

作为前端开发&#xff0c;我通常喜欢看以下几类网上视频教程&#xff1a; 技术框架和库教程&#xff1a;例如React、Vue、Angular等前端框架的教程。这些教程能帮助我深入了解这些框架的工作原理&#xff0c;以及如何高效地使用它们来开发Web应用。 CSS和JavaScript高级技巧&a…