Java中的Map

【Java】Map集合概述 目录 一、前言 二、Map介绍 三、Map的基本功能 Map功能演示: 四、Map集合的获取功能 Map遍历演示: 一、前言 map集合是我们常使用的集合,了解和使用map集合是必要的 二、Map介绍 基本形式: public interface Map<K,V> Map是一个接口,我们不能直接创建对象,可以通过多态的形式创建对象,Map中有两个 参数,一个是K表示键,一个是V表示值,且一个键有且对应一个值,Map中不能包含重复的 键,若是有重复的键... 阅读详情

大家可移步新博客:Java中的Map(三种双列集合万字详解)

1.Map概述

Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
创建Map集合的对象:因为Map是接口,不能直接创建对象,所以我们使用多态的方式来创建.在这里我们可以创建实现类HashMap的对象

2.Map集合的功能

方法名说明
V put(Object key, V value)添加元素
V remove(Object key)根据键删除键值对元素
void clear()清空Map中所有元素
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()获取集合长度,即集合中键个数
V get(Object key)根据键获取值
Set KeySet()获取所有键的集合
Collection values()获取所有值的集合
Set<Map.Entry<K,V>> entrySet()获取所有键值对象的集合
V getOrDefault(Object key, V defaultValue)当Map集合中有这个key时,就使用这个key对应的value值,如果没有就使用默认值defaultValue

代码演示:

1.Map集合的基本功能

package com.zzu.map;

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

public class Demo1 {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();//创建HashMap对象
        map.put("name","jh");//key value
        map.put("age","nineteen");
        map.put("sex","male");

        System.out.println(map.remove("age"));//nineteen
        System.out.println(map);
        System.out.println(map.containsKey("name"));//true
        System.out.println(map.containsValue("nineteen"));//false age已经remove
        System.out.println(map.isEmpty());//false
        System.out.println(map.size());//2
        map.clear();//清空
        System.out.println(map.isEmpty());//true
        System.out.println(map.size());//0

    }
}

输出结果:

nineteen
{sex=male, name=jh}
true
false
false
2
true
0

2.Map集合的获取功能

package com.zzu.map;

import java.util.*;

public class Demo2 {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        map.put("name","jh");
        map.put("age","nineteen");
        map.put("sex","male");

        System.out.println(map.get("sex"));//获取male
        System.out.println("----------");

        System.out.println(map.keySet());//获取键集合
        Set<String> ketSet=map.keySet();
        for(String s:ketSet){
            System.out.println(s);
        }
        System.out.println("----------");

        System.out.println(map.values());//获取值集合
        Collection<String> collection=map.values();
        for(String s:collection){
            System.out.println(s);
        }
        System.out.println("----------");

        System.out.println(map.entrySet());//获取所有键值对象集合
        Set<Map.Entry<String,String>> setMapEntry = map.entrySet();
        System.out.println(setMapEntry);
    }
}

输出结果:

male
----------
[sex, name, age]
sex
name
age
----------
[male, jh, nineteen]
male
jh
nineteen
----------
[sex=male, name=jh, age=nineteen]
[sex=male, name=jh, age=nineteen]

3.Map的getOrDefault()方法

package com.zzu.map;

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

public class Demo3 {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        map.put("name","jh");
        map.put("age","nineteen");
        map.put("sex","male");

        System.out.println(map.getOrDefault("name", "111"));//jh
        System.out.println(map.getOrDefault("time", "666"));//666
    }
}

3.巩固拓展

1.HashMap存储自定义对象实现键值唯一

重点:放在HashMap集合key部分的元素,以及放在HashSet集合中的元素,需要同时重写hashCode和equals方法
IDEA在源码中已经在HashMap中重写了上述两种方法

import java.util.Objects;

/*
类Student 重写其equals(),toString()方法 满足:
    (1).比学号、姓名、性别
    (2).System.out.println(new Student())输出信息:"学号:,姓名:(性别)"
    (3).数组存放,实现头插、学号序输出、不重复的输入输出
 */
public class Student {
    private String id;
    private String name;
    private String sex;

    public Student() {
    }

    public Student(String id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    //重写之后的equals方法 比较的就是对象内部的属性值
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(id, student.id) && Objects.equals(name, student.name) && Objects.equals(sex, student.sex);
    }

    //重写hashCode方法
    @Override
    public int hashCode() {
        return Objects.hash(id, name, sex);
    }

    //重写之后的toString方法 打印的是属性值
    @Override
    public String toString() {
        return  "学号:" + id  + ", 姓名:" + name + "("+sex+")";
    }
}
import java.util.*;

public class Test {
    public static void main(String[] args) {

        //测试toString equals方法
        Student s1 = new Student("202107","jh","m");
        Student s2 = new Student("202107","yy","f");
        //重写之后的toString() 打印的是内容
        System.out.println("s1.toString():"+s1.toString());
        System.out.println("s1.toString():"+s2.toString());
        //重写之后的equals方法 比较的是内容
        System.out.println("s1.equals(s2):"+s1.equals(s2));

        //1.创建一个链式集合
        LinkedList<Student> list = new LinkedList<>();

        //2.数组生成7个学生信息
        String[][] arrStu = {{"202101","张三","m"},{"202105","李四","m"},{"202101","张三","m"},
                {"202101","张三","m"},{"202103","王小","f"},{"202102","王小","f"},{"202105","李四","m"}};

        //3.生成学生对象 并且放入集合中
        for (int i = 0; i < arrStu.length; i++) {
            Student stu = new Student(arrStu[i][0],arrStu[i][1],arrStu[i][2]);
            list.add(stu);
        }

        //4.头部插入对象 并输出list对象信息
        Student s = new Student("202104","小七","f");
        list.add(0,s);
        list.forEach(str-> System.out.println(str));

        //5.学号序输出list对象信息
        list.sort((a,b)->a.getId().compareTo(b.getId()));
        System.out.println("--------idSort--------");
        list.forEach(str-> System.out.println(str));

        //6.创建一个set集合 接收数据 重写hashCode方法保证键值唯一
        Set<Student> set = new HashSet<>(list);
        System.out.println("----------Set---------");
        set.forEach(str-> System.out.println(str));
        //添加数据  返回值看是否添加成功
        Student stu = new Student("202101","张三","m");
        boolean result = set.add(stu);
        System.out.println("添加数据:"+result);
        //打印最终结果
        System.out.println("--------endSet--------");
        set.forEach(str-> System.out.println(str));
    }

}

输出内容:

s1.toString():学号:202107, 姓名:jh(m)
s1.toString():学号:202107, 姓名:yy(f)
s1.equals(s2):false
学号:202104, 姓名:小七(f)
学号:202101, 姓名:张三(m)
学号:202105, 姓名:李四(m)
学号:202101, 姓名:张三(m)
学号:202101, 姓名:张三(m)
学号:202103, 姓名:王小(f)
学号:202102, 姓名:王小(f)
学号:202105, 姓名:李四(m)
--------idSort--------
学号:202101, 姓名:张三(m)
学号:202101, 姓名:张三(m)
学号:202101, 姓名:张三(m)
学号:202102, 姓名:王小(f)
学号:202103, 姓名:王小(f)
学号:202104, 姓名:小七(f)
学号:202105, 姓名:李四(m)
学号:202105, 姓名:李四(m)
----------Set---------
学号:202101, 姓名:张三(m)
学号:202105, 姓名:李四(m)
学号:202104, 姓名:小七(f)
学号:202102, 姓名:王小(f)
学号:202103, 姓名:王小(f)
添加数据:false
--------endSet--------
学号:202101, 姓名:张三(m)
学号:202105, 姓名:李四(m)
学号:202104, 姓名:小七(f)
学号:202102, 姓名:王小(f)
学号:202103, 姓名:王小(f)

2.用到getOrDefault()方法的例题

原题图片

class Solution{
    public String evaluate(String s, List<List<String>> knowledge) {
        Map<String,String> mp = new HashMap();
        for(List<String> list:knowledge){
            mp.put(list.get(0),list.get(1));//添加键值对
        }
        StringBuilder sb = new StringBuilder();
        char[] ch = s.toCharArray();//这里将字符串对象中的字符转换为一个字符数组
        for(int i = 0,t;(t=i)<ch.length;i++){
            if(ch[i]=='('){
                while(ch[i]!=')') i++;
                sb.append(mp.getOrDefault(s.substring(t+1,i),"?"));//键值存在否 选择性添加
            }else{
                sb.append(ch[i]);
            }
        }
        return sb.toString();
    }
 }

3.较为综合的练习题

这一题充分展现了JAVA的”便捷“,不信你大可试试c/c++,说实话真的STL中map感觉比java好用多了,用java有时候还不如直接模拟哈希,写题自觉用c/c++在这里插入图片描述

class Solution {
    public int rearrangeCharacters(String s, String target) {
        char[] sChar = s.toCharArray();//字符串转换为字符数组
        char[] tChar = target.toCharArray();//java字符串不同于c/c++ 不存在字符组成 需要特定方法charAt()获取 如果遍历次数过多这样转换可能好点

        //创建两个哈希表计数
        Map<Character,Integer> sCounts = new HashMap<>();
        Map<Character,Integer> tCounts = new HashMap<>();

        for(Character ch:tChar){
            tCounts.put(ch, tCounts.getOrDefault(ch, 0) + 1);//感觉很妙么 c++直接map[key]++
        }
        for(Character ch:sChar){
            if(tCounts.containsKey(ch)){//只有在target中出现的字符才会影响最大副本数
                sCounts.put(ch, sCounts.getOrDefault(ch, 0) + 1);
            }
        }
        int ans = Integer.MAX_VALUE;//记录副本数
        for (Map.Entry<Character, Integer> entry : tCounts.entrySet()) {//遍历记录
            char c = entry.getKey();//获取键
            int count = entry.getValue();//在target中出现次数
            int totalCount = sCounts.containsKey(c) ? sCounts.get(c) : 0;//如果s中根本不存在 则直接赋予0
            ans = Math.min(ans, totalCount / count);//所有字符对应的最大副本数中的最小值即为使用s中的字符可以形成的target的最大副本数
            if (ans == 0) {//如果ans等于零 则直接返回
                return 0;
            }
        }
        return ans;
    }
}
Java基础:Map集合 Collection中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储。Map中的集合,元素是成对存在的。每个元素由键与值两部分组成,通过键可以找对所对应的值。Collection中的集合称为单列集合,Map中的集合称为双列集合。需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。 阅读详情

相关推荐

Java集合中的Map

Map是一种存储键值对的数据结构,其中键(Key)是唯一的,值(Value)可以重复。Map接口提供了通过键快速查找值的方法。

Eugene__Chen的博客 1127

【Java 基础篇】Java Map 详解

Map接口是一个键值对的集合,它继承自Collection接口中的size()和isEmpty()等方法,同时还提供了根据键查找值的方法,以及添加、删除和更新键值对的方法。在Java中,Map接口有几个常见的实现类,每个实现类都具有不同的性能和用途。HashMap:基于哈希表实现,具有快速的查找和插入操作,适用于需要快速查找键值对的场景。TreeMap:基于红黑树实现,可以对键进行排序,并提供了一系列与排序相关的方法,适用于需要对键进行排序的场景。

繁依Fanyi的博客 4万+

Windows系统的Mamba环境配置详细教程(状态空间模型)

causal_conv1d也是安装mamba的依赖必须库。安装完成后,通过pip list可以查看到安装的库。Triton是安装mamba的依赖,需要先安装。上述工作准备好后,按下面步骤安装。直接根据离线文件安装即可。是自己的虚拟环境名字。

2301_77831163的博客 3674

Java中的Map及其使用

Map Map集合概述和特点 概述: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 Map集合的功能概述 a:添加功能 V put...

taraex的博客 17万+

OpenHarmony自定义Launcher

OpenHarmony源码版本:4.0release开发板:DAYU / rk3568DevEco Studio版本:4.0.0.600切换分支为OpenHarmony-4.0-Release,并下载源码。

Abner_Crazy的博客 1630

极验第四代滑块验证码破解(三):滑块轨迹构造

极验第四代滑块验证码破解(三):滑块轨迹构造声明 声明 原创文章,请勿转载! 本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。 本文关联文章超链接:

帯泪的鱼的博客 8624

Java map 详解 - 用法、遍历、排序、常用API等

Java map 详解 - 用法、遍历、排序、常用API等

weixin_45817985的博客 5376

[RK3588-Android12] 深入解析USB Type-C PD充电功能的DTS配置与内核驱动修改

本文深入探讨了在RK3588 Android12平台上禁用USB Type-C PD充电功能的实现方法。通过分析设备树(DTS)配置与内核驱动(TCPM框架)的联动修改,详细解读了如何通过添加`pd-disable`属性及修改`tcpm.c`驱动代码,使Type-C端口绕过PD协议协商,仅工作在传统电源模式,以满足工控等特定场景对供电稳定性和成本控制的需求。

9o8p7i6u5y的博客 994

Java的Map中的map.keySet()方法

该方法返回map中所有key值的列表。今天再代码中看到了Map集合中的HashMap的map.keySet()方法,首先看一下这个方法的定义 /** * Returns a {@link Set} view of the keys contained in this map. * The set is backed by the map, s...

dev_zyx的博客 2万+

Java后端实战:钉钉互动卡片消息从配置到生产级对接

在企业级消息推送场景中,机器人通知已从简单的文本向富交互演进。其核心原理在于通过可交互的卡片模板,将传统单向通知升级为双向、有状态的微型应用界面,实现了用户无需跳转即可完成操作的技术价值。这广泛应用于审批、任务确认、数据填报等需要即时反馈的业务流程。本文聚焦于钉钉平台,深入剖析其互动卡片消息机制,并基于Java后端,系统讲解如何实现包括安全验签、异步回调与卡片动态更新在内的生产级对接方案,涵盖配置管理、服务降级等工程实践关键点,助力构建稳定高效的企业消息交互服务。

weixin_30617737的博客 435

从零开始:HLW8110电能计量IC的硬件设计与软件调试全攻略

本文详细介绍了HLW8110电能计量IC的硬件设计与软件调试全流程,涵盖核心特性、抗干扰设计、UART通信协议及校准方法。通过实战案例和优化技巧,帮助工程师快速掌握高精度交流测量技术,适用于智能插座、充电桩等应用场景。

p5l2m9n4o6q的博客 576

java map中套map_Java Map – Java中的Map

java map中套mapJava Map is part of collections framework. Java Map object is used to store key-value mappings. Java Map can’t contain duplicate keys however duplicate values are allowed. Java Map是集合框架的一...

从零开始的教程世界 1183

基于网关实现不同网段S7-1200 CPU的通信方法

在A网段的计算机上ping B网段的计算机:在A网段的计算机上使用ping命令,向B网段的计算机发送数据包。在B网段的计算机上ping A网段的计算机:同样地,在B网段的计算机上使用ping命令,向A网段的计算机发送数据包。数据包也会经过路由器进行转发,最终到达A网段的计算机。配置路由器:在路由器上配置两个网段的IP地址和子网掩码,并设置路由表,使得路由器可以将A网段和B网段之间的数据进行转发。确定两个网络之间的路由器:假设需要将A网段和B网段进行通信,需要在A、B两个网段之间设置一台路由器。

电工 2398

java的map是什么_java中的map是什么

java中的map是一种依照键存储元素的容器。在map中键可以是任意类型的对象。map中不能有重复的键,每个键都有一个对应的值。Map是一个集合,一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是整数。在Map中键(key)可以是任意类型的对象。Map中不能有重复的键(Key),每个键(key)都有一个对应的值(value)。(推荐教程:java课程)一个键(key)和它...

weixin_42117224的博客 7896

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Map java中的map 如何修改Map中的对应元素

Map java中的map 如何修改Map中的对应元素

Working harder, getting stronger! 9193

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java如何在map 中 修改元素_Map java中的map 如何修改Map中的对应元素

Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。Map的接口Map---实现MapMap.Entry--Map的内部类,描述Map中的按键/数值对。SortedMap---扩展Map,使按键保持升序排列关于怎么使用,一般是选择Map的子类,而不直接用Map类。下面以HashMap为例。public static void...

weixin_30325929的博客 1898

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

(转)Map java中的map 如何修改Map中的对应元素

Map java中的map 如何修改Map中的对应元素Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。         Map的接口         Map---实现Map         Map.Entry--Map的内部类,描述Map中的按键/数值对。         SortedMap---扩展Map,使按键保持升序排列         关于怎么使用,一般是选择Map的子类,而不直接用Map类。         下面以HashMap为例。         pu

xiaohk的专栏 3万+

java基础——java集合map详解

Map接口是Java集合框架中的一部分,用于存储键值对(key-value pairs)。与List和Set不同,Map不继承自Collection接口,而是独立存在。Map中的每个元素都是一个键值对,其中键(key)是唯一的,而值(value)可以重复。Map接口允许通过键来快速查找、插入和删除对应的值。键的唯一性确保了每个键只能映射到一个值,但不同的键可以映射到相同的值。特点:基于引用地址判断键是否相等。使用场景:适用于需要精确对象比较的场景。

qq_47980550的博客 5227

java table map_Java中的Map总结

1.Map用法类型介绍Java 自带了各种 Map 类。这些 Map 类可归为三种类型:1. 通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap、TreeMap、WeakHashMap、ConcurrentHashMap2. 专用Map,通常我们不必亲自创...

weixin_39586649的博客 1063

JAVA中的Map集合

map集合

2401_83377623的博客 1791

java map包_java Map

java MapCreateTime--2017年5月26日08:44:16Author:Marydon四、java数据类型之Map需要导入包:importjava.util.Map;import java.util.HashMap;(一)数据格式1.1 Map与HashMap{FHIGHPRICE_VILLLEVE=0, FSTATUS=1, FPROVLEVELLIMIT=1, FBEGIND...

weixin_33002763的博客 3789

java如何在map 中 修改元素_Map java中的map 如何修改Map中的对应元素 | 学步园

Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。Map的接口Map---实现MapMap.Entry--Map的内部类,描述Map中的按键/数值对。SortedMap---扩展Map,使按键保持升序排列关于怎么使用,一般是选择Map的子类,而不直接用Map类。下面以HashMap为例。public static void...

weixin_31964135的博客 551

java中的Map集合

java中的Map集合 什么是Map集合? Map用于保存具有映射关系的数据,Map集合里保存着两组值,一组用于保存Map的ley,另一组保存着Map的value。 map集合的作用 和查字典类似,通过key找到对应的value,通过页数找到对应的信息。用学生类来说,key相当于学号,value对应name,age,sex等信息。用这种对应关系方便查找。 Map和Set的关系 可以说关系是很密切...

weixin_43381234的博客 339
上一篇: LeetCode1802:有界数组中指定下标处的最大值
下一篇: Java中的Set
天皓Oo
博客等级 码龄5年 337粉丝 61原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值