Java Map集合

news2024/12/29 11:35:15

8 Map集合

在这里插入图片描述

  • HashMap: 元素按照键是无序,不重复,无索引,值不做要求
  • LinkedHashMap: 元素按照键是有序,不重复,无索引,值不做要求

8.1 Map集合概述和特点

  • Map集合是一种双列集合,每个元素包含两个值
  • Interface Map<K,V>; K:键的类型,V:值的类型
  • Map集合的每个元素的格式:key = value(键值对元素)
  • Map集合也被称为“键值对集合”
  • Map集合特点
    • Map 集合的键是无序,不重复,无索引的
    • Map 集合后面重复的键对应的元素会覆盖前面的整个元素
  • 创建Map集合对象
    • 多态的方式
    • 具体的实现类HashMap
package ceshi;

import java.util.HashMap;
import java.util.Map;

public class MapDemo {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();

        map.put("y1","10");
        map.put("y2","20");
        map.put("y2","30"); //键和前面相同时,会替换前面的值
        map.put("y3","30");
        System.out.println(map); //{y1=10, y3=30, y2=30}
    }
}

8.2 Map集合的基本方法

方法名说明
public V put(K key, V value)添加元素
public V remove(Object key)根据键删除键值对元素
public void clear()移除所有键值对元素
public boolean containKey(Object key) [kənˈteɪn]判断集合是否包含指定的键
public boolean containValue(Object value)判断集合是否包含指定的值
public boolean isEmpty()判断集合是否为空
public int size()集合的长度,也就是集合中键值对个数
package ceshi;

import java.util.HashMap;
import java.util.Map;

public class MapDemo {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();

        //1,public V put(K key, V value) 	添加元素
        map.put("y1","10");
        map.put("y2","20");
        map.put("y3","30");
        System.out.println(map); //{y1=10, y2=20, y3=30}

        //2,public V remove(Object key) 	根据键删除键值对元素
        /*map.remove("y2");
        System.out.println(map); //{y1=10, y3=30}
        */

        //3,public void clear() 	移除所有键值对元素
       /* map.clear();
        System.out.println(map); //{}
        */

        //4,public boolean containKey(Object key) [kənˈteɪn] 	判断集合是否包含指定的键
        /*System.out.println(map.containsKey("y2")); //ture
        System.out.println(map.containsKey("y4")); //false*/

        //5,public boolean containValue(Object value) 	判断集合是否包含指定的值
//        System.out.println(map.containsValue("10")); //true

        //6,public boolean isEmpty() 	判断集合是否为空
//        System.out.println(map.isEmpty()); //false

        //7,public int size() 	集合的长度,也就是集合中键值对个数
        System.out.println(map.size()); //3
    }
}

8.3 Map集合的获取方法(重点)

方法名说明
public V get(Object key)根据键获取值
public Set<K> keySet()获取所有键的集合,存储到Set集合中
public Collection<V> values()获取所有值的集合,存储到Collection集合中
public Set<Map.Entry<K,V>> entrySet()获取所有键值对对象的集合(Set集合)
package ceshi;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();

        //public V put(K key, V value) 	添加元素
        map.put("y1","10");
        map.put("y2","20");
        map.put("y3","30");
        System.out.println(map); //{y1=10, y2=20, y3=30}

        //1,public V get(Object key) 	根据键获取值
        System.out.println(map.get("y1")); //10
        System.out.println(map.get("y4")); //null

        //2,public Set<K> keySet() 	获取所有键的集合,存储到Set集合中
        Set<String> key = map.keySet();
        for(String s:key) {
            System.out.println(s);
            /*y1
            y2
            y3*/
        }

        //3,public Collection<V> values() 	获取所有值的集合,存储到Collection集合中
        Collection<String> vlaues = map.values();
        for(String s:vlaues) {
            System.out.println(s);
            /*10
            20
            30*/
        }

        //4,public Set<Map.Entry<K,V>> entrySet() 	获取所有键值对对象的集合(Set集合)
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for(Map.Entry<String, String> s:entries) {
            System.out.println(s);
            /*
            y1=10
            y2=20
            y3=30*/
        }
    }
}

8.4 Map集合的遍历

  • Map 集合遍历有三种方式
    • "键找值"的方式遍历
    • "键值对"的方式遍历
    • Lambda 表达式(JDK1.8开始之后的新技术)

8.4.1 "键找值"的方式遍历(常用)

  • 1、获取所有键的集合:用keySet()方法实现
  • 2、遍历键的集合,获取到每一个键:用增强for遍历实现
  • 3、根据键去找值:在增强for中,用get(Object key)方法实现
package ceshi;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();

        //public V put(K key, V value) 	添加元素
        map.put("y1", "10");
        map.put("y2", "20");
        map.put("y3", "30");
        System.out.println(map); //{y1=10, y2=20, y3=30}

        //1、获取所有键的集合:用keySet()方法实现
        Set<String> keySet = map.keySet();

        //2、遍历键的集合,获取到每一个键:用增强for遍历实现
        for (String key : keySet) {
            //3、根据键去找值:在增强for中,用get(Object key)方法实现
            String value = map.get(key);
            System.out.println(key + "=" + value);
            /*
            y1=10
            y2=20
            y3=30*/
        }
    }
}

8.4.2 "键值对"的方式遍历

  • 1、获取所有键值对对象的集合:Set<Map.Entry<K,V>> entrySet()
  • 2、遍历键值对对象的集合,得到每一个键值对对象:用增强for实现,得到每一个Map.Entry
  • 3、根据键值对对象获取键和值:在增强for中,用geKey()得到键;用getValue()得到值
package ceshi;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();

        //public V put(K key, V value) 	添加元素
        map.put("y1", "10");
        map.put("y2", "20");
        map.put("y3", "30");
        System.out.println(map); //{y1=10, y2=20, y3=30}

        //1、获取所有键值对对象的集合:Set<Map.Entry<K,V>> entrySet()
        Set<Map.Entry<String, String>> entrySet = map.entrySet();

        //2、遍历键值对对象的集合,得到每一个键值对对象:用增强for实现,得到每一个Map.Entry
        for(Map.Entry<String, String> me:entrySet) {
            //3、根据键值对对象获取键和值:在增强for中,用geKey()得到键;用getValue()得到值
            String key = me.getKey();
            String value = me.getValue();
            System.out.println(key+"="+value);
            /*
            y1=10
            y2=20
            y3=30*/
        }
    }
}

8.4.3 Lambda [ˈlæmdə] 表达式方式遍历

package ceshi;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();

        //public V put(K key, V value) 	添加元素
        map.put("y1", "10");
        map.put("y2", "20");
        map.put("y3", "30");
        System.out.println(map); //{y1=10, y2=20, y3=30}

        map.forEach((k , v) -> {
            System.out.println(k+"="+v);
            /*
            y1=10
            y2=20
            y3=30*/
        });
    }
}

8.5 Map集合存储自定义类型

  • Map集合的键和值都可以存储自定义类型
  • 如果希望Map集合认为自定义类型的键对象重复了,必须重写对象的hashCode()equals()方法

8.6 LinkedHashMap(HashMap子类)

  • LinkedHashMap集合是有序不重复的键值对集合
public class LinkedHashMapDemo {
    public static void main(String[] args) {
        Map<String , Integer> map = new LinkedHashMap<>();
        map.put("y1",10);
        map.put("y2",20);
        map.put("y3",30); 
        map.put("y3",100); //键不变,只是替换其值
        
        System.out.println(map);// {y1=10, y2=20, y3=100}   
    }
}

8.7 TreeMap

  • TreeMap 集合按照键是可排序不重复的键值对集合(默认升序)

8.8 案例

8.8.1 集合遍历

在这里插入图片描述

package ceshi;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        //创建HashMap集合对象
        HashMap<String,Student> hm =new HashMap<>();

        Student s1 = new Student("y1",10);
        Student s2 = new Student("y2",20);
        Student s3 = new Student("y3",30);

        hm.put("itheima1",s1);
        hm.put("itheima2",s2);
        hm.put("itheima3",s3);

        //键找值
        Set<String> keySet = hm.keySet();
        for(String key:keySet) {
            Student value = hm.get(key);
            System.out.println(key+","+value.getName()+","+value.getAge());
            /*itheima3,y3,30
            itheima1,y1,10
            itheima2,y2,20*/
        }
        System.out.println("---------");

        //键值对
        Set<Map.Entry<String, Student>> entrySet= hm.entrySet();
        for(Map.Entry<String, Student> me:entrySet) {
            String key = me.getKey();
            Student value = me.getValue();
            System.out.println(key+","+value.getName()+","+value.getAge());
            /*itheima3,y3,30
            itheima1,y1,10
            itheima2,y2,20*/
        }

    }
}

8.8.2 集合嵌套之 ArrayList嵌套HashMap

在这里插入图片描述

package ceshi;

import java.util.*;

public class MapDemo {
    public static void main(String[] args) {
        //1,创建ArrayList集合对象
        ArrayList<HashMap<String,String>> array = new ArrayList<>();

        //2,创建HashMap集合,并添加键值对元素
        HashMap<String,String> hm1 = new HashMap<>();
        hm1.put("y1","10");
        HashMap<String,String> hm2 = new HashMap<>();
        hm1.put("y2","20");
        HashMap<String,String> hm3 = new HashMap<>();
        hm1.put("y3","30");

        //3,把HashMap作为元素添加到Arraylist
        array.add(hm1);
        array.add(hm2);
        array.add(hm3);

        //遍历Arraylist
        for(HashMap<String,String> hm:array) {
            Set<String> keySet = hm.keySet();
            for(String key:keySet) {
                String value = hm.get(key);
                System.out.println(key+","+value);
                /*y1,10
                y2,20
                y3,30*/
            }
        }
    }
}

8.8.3 统计字符串中每个字符出现的次数

在这里插入图片描述在这里插入图片描述

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

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

相关文章

【C++】 C C++ 内存管理

文章目录&#x1f4d5; C、C 内存分布&#x1f4d5; C 内存管理方式1. 操作内置类型2. 操作自定义类型&#x1f4d5; operator new 与 operator delete&#x1f4d5; 定位 new&#x1f4d5; C、C 内存分布 C 和 C 的内存分布没什么区别&#xff0c;C 是基于 C 语言的&#xff…

腾讯xSRC[linux+docker]搭建教程

腾讯xSRC[linuxdocker]搭建教程 1.下载镜像 docker pull xsrc/xsrc:v1.0.12.启动镜像 1️⃣启动镜像 docker run -it -d --name xsrc_web -p 60080:80 -p 63306:3306 --privilegedtrue xsrc/xsrc:v1.0.1注意将3306端口映射到8806端口&#xff0c;以便于远程连接访问容器内数…

手写识别字体的步骤是什么?怎么识别图片中的文字?

手写识别字体的步骤是什么&#xff1f;怎么识别图片中的文字&#xff1f; 1. 打开信风工具网&#xff0c;点击拍照按钮&#xff0c;选择拍图识字模式&#xff0c;对准需要识别的文件进行拍摄&#xff61;在线工具地址&#xff1a; https://ocr.bytedance.zj.cn/image/ImageT…

VScode 自定义主题颜色

vscode其实已经有很多完善且好看的主题了&#xff0c;但我总觉得每一个主题对我来说&#xff0c;都有那么一点点不够完美&#xff0c;比如亮色的主题&#xff0c;颜色就没有深色主题那么好看&#xff0c;对比度高。 好不容易看到一个好看的主题吧&#xff0c;又觉得某一部分的…

2023213-popover弹窗框中的teleported属性--Element-plus踩坑日记

popover弹窗框中的teleported属性–Element plus踩坑日记 今天在做项目时&#xff0c;有一个地方用到了弹窗框&#xff0c;但是有需求需要修改弹窗的阴影部分 比如下方的 我想对阴影进行修改&#xff0c;但是很是纳闷&#xff0c;各种标签选择器都不生效&#xff0c;很奇怪。…

使用地理定位来自定义网络钓鱼

在全球市场中&#xff0c;地理定位的能力是巨大的。 从本质上讲&#xff0c;这意味着企业可以根据收件人的位置定制广告。 纽约人可能会收到与法国人不同的广告。这使得广告对企业更有价值&#xff0c;对消费者来说更个性化。 还有另一群人想要个性化他们的产品&#xff1a;…

2023年要跟踪的11个销售管理关键指标

销售管理关键指标有&#xff1a;营销合格线索数量&#xff08;MQL&#xff09;、MQL 到 SQL 的转换率、商机赢单率、获客成本、总销售额、客户终身价值&#xff08;LTV&#xff09;、LTV 与 CAC 比率、赢单周期、每客户平均销售额&#xff08;平均客单价&#xff09;、每销售人…

全球十大资质正规现货黄金交易平台排名榜单(最新版汇总)

如今&#xff0c;在金融市场上&#xff0c;黄金已经成为公众喜爱的避险产品&#xff0c;尤其是近年来出现的现货黄金&#xff0c;这是许多朋友日常财务管理的标准。但我们在参考黄金交易平台排名进场时&#xff0c;需要留意哪些因素&#xff1f; 1、交易模式 事实上&#xf…

软件测试 -- 高阶 2 软件测试与软件开发

辅车相依&#xff0c;唇亡齿寒。-- 《左传僖公五年》 释译&#xff1a;颊骨和齿床互相依靠&#xff0c;嘴唇没有了&#xff0c;牙齿就会感到寒冷。比喻利害密要相关&#xff0c;命运紧密相关联。-- 百度百科 测试与开发是什么关系&#xff1f; 1. 软件开发流程 2. 开发和测…

AcWing 167. 木棒(DFS + 剪枝优化)

AcWing 167. 木棒&#xff08;DFS 剪枝优化&#xff09;一、问题二、分析1、整体分析2、剪枝优化&#xff08;1&#xff09;优化搜索顺序&#xff08;2&#xff09;排除等效冗余&#xff08;3&#xff09;可行性剪枝&#xff08;4&#xff09;最优性剪枝&#xff08;5&#xf…

ASEMI低压MOS管AO3401封装,AO3401图片

编辑-Z ASEMI低压MOS管AO3401参数&#xff1a; 型号&#xff1a;AO3401 封装&#xff1a;SOT-23 漏极-源极电压&#xff08;VDS&#xff09;&#xff1a;30V 栅源电压&#xff08;VGS&#xff09;&#xff1a;12V 连续漏电流&#xff08;I&#xff09;&#xff1a;4.2A …

K_A12_004 基于STM32等单片机采集人体红外感应(HC-SR501)模块串口与OLED0.96双显示

K_A12_004 基于STM32等单片机采集人体红外感应&#xff08;HC-SR501&#xff09;模块串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明模块工作原理:对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCHC-SR501模块1.2、STM32F103C8T6HC-SR501模块…

docker-compose概述与简单编排部署

一、Docker-compose 简介Docker-Compose项目是基于Python开发的Docker官方开源项目&#xff0c;负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层&#xff0c;分别是 工程&#xff08;project&#xff09;&#xff0c;服务&#xff08;service&#…

MySQL学习笔记——CSDN学习记录九:数据库存储引擎

存储引擎 一、MySQL 体系结构&#xff1a; 二、存储引擎概念&#xff1a; MySQL 中的数据用于各种不同的技术存储在文件或内存。这些技术的每一个都使用不同的存储机制、索引技巧、锁定水平&#xff0c;最终提供不同的功能。通过选择不同的技术&#xff0c;能够得到更好的数据处…

03- SVC 支持向量机做人脸识别 (项目三)

数据集描述: sklearn的lfw_people函数在线下载55个外国人图片文件夹数据集来精确实现人脸识别并提取人脸特征向量数据集地址: sklearn.datasets.fetch_lfw_people — scikit-learn 1.2.1 documentationPCA降维: pca PCA(n_components0.9) 数据拆分: X_train, X_test, y_tra…

正大期货本周财经大事抢先看

美国1月CPI、Fed 等央行官员谈话 美国1月超强劲的非农就业人口&#xff0c;让投资人开始上修对这波升息循环利率顶点的预测&#xff0c;也使本周二 (14 日) 的美国 1月 CPI 格外受关注。 介绍正大国际期货主账户对比国内期货的优势 ​第一点&#xff1a;权限都在主账户 例如…

B站基于缓存优化 PRESTO 集群查询性能

导读&#xff1a;本次分享主题为 B 站 Presto 集群查询性能的优化&#xff0c;首先会简单介绍 Presto以及 B 站内部 Presto 集群的架构。接下来讲解针对 Presto 做的改造&#xff0c;主要是 Presto 搭配 Alluxio 和 Presto 搭配 Alluxio local cache 的使用。最后会对后续计划开…

C++类基础(十三)

类的继承 ● 通过类的继承&#xff08;派生&#xff09;来引入“是一个”的关系&#xff08; 17.2 — Basic inheritance in C&#xff09; – 通常采用 public 继承&#xff08; struct V.S. class &#xff09; – 注意&#xff1a;继承部分不是类的声明 – 使用基类的指针…

StarRocks技术内幕 | 资源隔离原理解析

资源隔离一直是 StarRocks 用户讨论较多的话题&#xff0c;对于资源隔离的诉求&#xff0c;主要集中在四点&#xff1a;1. 很多用户关注资源的隔离性&#xff0c;期望当有核心业务的查询运行时&#xff0c;可以限制其他类型任务的使用资源&#xff0c;进而保障核心业务的响应时…

SpringMVC(1)

Web项目:基于HTTP协议&#xff0c;当一个用户从浏览器上面输入URL地址之后&#xff0c;URL能够和我们的程序映射起来&#xff0c;可以让用户的请求触达到后端程序里面&#xff0c;并且根据程序的处理&#xff0c;把结果返回浏览器&#xff1b; Spring MVC要进行学习的内容: 1)连…