Java集合--Map集合

【Java 集合】Map 集合底层原理 Map 集合底层原理 阅读详情

Map集合

Map接口由HashMap类,SortedMap接口组成,其中SortedMap接口由TreeMap类实现。
特点:

  • 存储内容为键值对
  • 键:无序,无下标,不可重复
  • 值:无序,无下标,允许重复
    在这里插入图片描述

案例

Student类(后续测试实现类存储的对象都是该类)

public class Student implements Comparable<Student>{
    private String name;
    private int age;
    public Student(){}

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }

    //手动重写toString方法
    /*public String toString(){
        return name+":"+age;
    }*/

    //alt+insert自动重写toString方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public int compareTo(Student o) {
        int n1=this.name.compareTo(o.getName());
        int n2=this.age-o.getAge();
        return n2==0?n2:n1;
    }
}
public class testMap {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        addElement(map);
        traverseElement(map);
        //判断
        System.out.println("==========判断============");
        System.out.println(map.containsKey("123"));
        System.out.println(map.containsValue("小米"));

        deleteElement(map);
    }

    private static void traverseElement(Map<String, String> map) {
        System.out.println("==========遍历============");
        System.out.println("------keySet-----");
        Set<String> keySet=map.keySet();
        for (String key:keySet) {
            System.out.println(key+" : "+map.get(key));
        }
        //entrySet效率要高于keySet
        System.out.println("------entrySet-----");
        Set<Map.Entry<String,String>> entries=map.entrySet();
        for (Map.Entry<String, String> key:entries) {
            System.out.println(key.getKey()+" : "+key.getValue());
        }
    }

    private static void deleteElement(Map<String, String> map) {
        System.out.println("==========删除============");
        map.remove("123");
        System.out.println(map);
        map.clear();
        System.out.println(map);
    }

    private static void addElement(Map<String, String> map) {
        System.out.println("==========添加============");

        map.put("456","小红");
        map.put("123","小明");
        map.put("789","小华");
        System.out.println(map);
        System.out.println("元素个数:"+map.size());
    }
}

代码执行结果
在这里插入图片描述

HashMap

特点

  • jdk1.2版本引入
  • 线程不安全,运行效率快
  • 允许使用null作为key或者value
  • 构造时,默认构造一个初始容量为16,默认加载因子为0.75的空HashMap
    • HashMap没有添加元素时,size=0,添加元素后,size=添加的元素个数。(这样设计的目的时为了节省空间)
    • 当HashMap中的元素个数=16*0.75=12时,HashMap会进行扩容,容量变为16*2=32。当元素个数达到32*0.75=24时,继续扩容,32*2=64,以此类推。
  • 存储结构:哈希表(数组+链表+红黑树)
    • 数组长度大于等于64时,数组中某个位置的链表长度大于8,链表变为红黑树(平衡查找树)
  • jdk1.8之前链表时头插入,jdk1.8之后链表是尾插入

案例

public class testHashMap {
    public static void main(String[] args) {
        HashMap<Student,String> hashMap=new HashMap<>();
        //刚创建的hashMap没有添加元素时,size=0,目的时节省空间
        Student s1=new Student("小明",18);
        Student s2=new Student("小华",19);
        Student s3=new Student("小红",20);
        Student s4=new Student("小华",20);

        addElement(hashMap, s1, s2, s3, s4);
        traverseElement(hashMap);

        System.out.println("---------判断-----");
        System.out.println(hashMap.containsValue("深圳"));
        System.out.println(hashMap.containsKey(s1));

        deleteElement(hashMap, s1);

    }

    private static void deleteElement(HashMap<Student, String> hashMap, Student s1) {
        System.out.println("---------删除-----");
        hashMap.remove(s1);
        System.out.println(hashMap);
        hashMap.clear();
        System.out.println(hashMap);
    }

    private static void traverseElement(HashMap<Student, String> hashMap) {
        System.out.println("---------遍历-----");
        System.out.println("---------keySet-----");
        for (Student key:hashMap.keySet()) {
            System.out.println(key.toString()+" : "+hashMap.get(key));
        }
        System.out.println("---------entrySet-----");
        for (Map.Entry<Student,String> entry:hashMap.entrySet()) {
            System.out.println(entry.getKey()+" : "+entry.getValue());
        }
    }

    private static void addElement(HashMap<Student, String> hashMap, Student s1, Student s2, Student s3, Student s4) {
        System.out.println("---------添加-----");
        hashMap.put(s1,"上海");
        hashMap.put(s2,"北京");
        hashMap.put(s3,"深圳");
        //重复添加同一个键,该键对应的值会被重写为最后一次添加的值
        hashMap.put(s3,"广州");

        hashMap.put(s4,"深圳");
        //如果想要删除重复键,需要重写equals方法
        hashMap.put(new Student("小华",20),"南京");
        System.out.println(hashMap);
        System.out.println("元素个数:"+hashMap.size());
    }
}

代码执行结果
在这里插入图片描述

TreeMap

特点

  • 基于排序顺序实现元素不重复
  • 实现了SortedMap接口,可以对key自动排序
  • 元素对象的类型必须实现Comparable接口,指定排序规则
  • 通过CompareTo来确定重复元素

案例

public class testTreeMap {
    public static void main(String[] args) {
        //可以使用定制比较器,方法和TreeSet相同
        TreeMap<Student,String> treeMap=new TreeMap<>();
        //刚创建的treeMap没有添加元素时,size=0,目的是节省空间
        Student s1=new Student("小明",18);
        Student s2=new Student("小华",19);
        Student s3=new Student("小红",20);
        Student s4=new Student("小华",20);

        addElement(treeMap, s1, s2, s3, s4);
        traverseElement(treeMap);

        System.out.println("---------判断-----");
        System.out.println(treeMap.containsValue("深圳"));
        System.out.println(treeMap.containsKey(s1));

        deleteElement(treeMap, s1);

    }

    private static void deleteElement(TreeMap<Student, String> treeMap, Student s1) {
        System.out.println("---------删除-----");
        treeMap.remove(s1);
        System.out.println(treeMap);
        treeMap.clear();
        System.out.println(treeMap);
    }

    private static void traverseElement(TreeMap<Student, String> treeMap) {
        System.out.println("---------遍历-----");
        System.out.println("---------keySet-----");
        for (Student key:treeMap.keySet()) {
            System.out.println(key.toString()+" : "+treeMap.get(key));
        }
        System.out.println("---------entrySet-----");
        for (Map.Entry<Student,String> entry:treeMap.entrySet()) {
            System.out.println(entry.getKey()+" : "+entry.getValue());
        }
    }

    private static void addElement(TreeMap<Student, String> treeMap, Student s1, Student s2, Student s3, Student s4) {
        System.out.println("---------添加-----");
        /*Student s1=new Student("小明",18);
        Student s2=new Student("小华",19);
        Student s3=new Student("小红",20);
        Student s4=new Student("小华",20);*/
        treeMap.put(s1,"上海");
        treeMap.put(s2,"北京");
        treeMap.put(s3,"深圳");
        //重复添加同一个键,该键对应的值会被重写为最后一次添加的值
        treeMap.put(s3,"广州");   //重复键,修改值
        //如果想要删除重复键,需要重写equals方法
        treeMap.put(s4,"深圳");   //重复键不会添加
        treeMap.put(new Student("小华",20),"南京");
        System.out.println(treeMap);
        System.out.println("元素个数:"+treeMap.size());
    }
}

代码执行结果
在这里插入图片描述

其他相关文章

激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO 激光SLAM总结——Fast LIO / Fast LIO2 / Faster LIO 在之前的工作中有接触过LOAM,最近在工作中又接触到Faster LIO相关的工作,于是想着对Fast LIO / Fast LIO2 / Faster LIO这一系列工作进行一个简单的总结,以加深自己对激光SLAM算法的理解,之前总结过的一些和激光SLAM算法相关的博客还有,感兴趣的同学可以一起学习讨论: 激光SLAM总结——VLOAM / LIMO算法解析 激光SLAM总结——LIO-Mapping / LIOM / 阅读详情

相关推荐

C# NX二次开发:两种过滤器设置方案的实战解析与场景适配

本文深入解析C# NX二次开发中的两种过滤器设置方案:AddFilterHandler回调与MaskTriple属性设置。通过实战案例对比其性能差异与适用场景,帮助开发者根据需求选择最优方案,提升NX插件开发效率与交互体验。特别针对BlockStyler集成场景提供专业建议,是NX二次开发者的实用指南。

weixin_33739646的博客 844

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

Map用法 类型介绍 Java 自带了各种 Map 类,这些 Map 类可归为三种类型: 通用Map 用于在应用程序中管理映射,通常在 java.util 程序包中实现HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap、TreeMap、WeakHashMap、ConcurrentHashMap 专用Map 通常我们不必亲自创建此类Map,而是通过某些其他类对其进行访问java.util.jar.Attributes、jav..

My_SweetXue的博客 490

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码)

本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。

ss78901的博客 467

Java-Map集合

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

PreyHard的博客 372

杰理芯片外挂Flash音乐播放功能避坑指南(附FAT文件系统配置)

本文详细解析了杰理芯片外挂Flash实现音乐播放功能的技术要点与常见问题,包括硬件连接、SPI驱动配置、FAT文件系统烧录及音乐播放集成等关键环节。特别针对Flash选型、FAT文件系统配置等易错点提供实用解决方案,帮助开发者高效完成嵌入式音频系统开发。

yhn45678901的博客 833

Meta DINOv3实战指南:如何用7B参数ViT模型提升你的视觉任务性能(附Hugging Face部署教程)

本文提供了Meta DINOv3 7B参数ViT模型的实战部署指南。文章详细解析了该自监督视觉模型的优势,并重点演示了如何在Hugging Face平台上高效加载这一大规模模型,同时给出了图像分类、语义分割等下游任务的性能提升技巧与代码示例,帮助开发者在实际视觉任务中应用这一前沿技术。

pz89012345的博客 324

Map集合

Map集合: 特点:Map集合的键是无序的,不重复的,无索引的,值没有要求(可以重复) Map集合后面重复的键对应的值会覆盖前面重复键的值 Map集合的键值对可以为null HashMap集合常用方法 特点:元素按照键是无序,不重复,无索引,值不做要求(与Map集合一样) public static void main(String[] args) { Map<String,Integer> maps = new HashMap<>(); //添加集合

weixin_50686218的博客 420

从示波器波形看懂死区:手把手教你调ST MCU的PWM,避免三相桥直通炸管

本文详细解析了如何通过示波器波形判断PWM死区时间,并手把手教你调整STM32高级定时器寄存器,避免三相逆变桥直通炸管。文章涵盖死区时间的本质与风险、STM32配置详解、示波器调试技巧及FOC系统中的特殊考量,帮助工程师优化电机驱动性能与安全性。

weixin_30315723的博客 733

JAVA中的Map

接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同, Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。 Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。 Collection中的集合称为单列集合,Map中的集合称为双列集合。 需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。,

weixin_42352733的博客 3万+

SpringBoot实战——仿b站项目(一)

热部署就是当应用程序这种运行的时候升级冉家或者修改某一部分代码、配置文件时,无需手动启动应用,即可修改的部分生效工具 + IDEA配置。

weixin_52880572的博客 3456

SpringBoot实现快速导入EXCEL

MaterialMonitorController.java @Log(title = "物料监测", businessType = BusinessType.IMPORT) @RequiresPermissions("system:materialMonitor:import") @PostMapping("/importData") @ResponseBody ...

LEN程序员的一生 4817

Java基础 Map集合

主要内容 Map集合 教学目标 能够说出Map集合特点 使用Map集合添加方法保存数据 使用”键找值”的方式遍历Map集合 使用”键值对”的方式遍历Map集合 能够使用HashMap存储自定义键值对的数据 能够使用HashMap编写斗地主洗牌发牌案例 第一章 Map集合 1.1概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的...

kai46385076的专栏 9043

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

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

java-map集合

1.从需求中我们可以看到,有三个省份,每一个省份有多个城市 我们可以用一个Map集合的键表示省份名称,而值表示省份有哪些城市。TreeMap集合的底层原理和TreeSet也是一样的,底层都是红黑树实现的。3.遍历80个学生选择景点的集合,得到每一个景点,判断Map集合中是否包含该景点 如果不包含,则存储"景点=1"1.首先可以将80个学生选择的景点放到一个集合中去(也就是说,集合中的元素是80个任意的ABCD元素)TreeMap集合的特点也是由键决定的,默认按照键的升序排列,键不重复,也是无索引的。

qq_69149404的博客 1129

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Camera2Demo

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

JAVA中的Map集合

map集合

2401_83377623的博客 1791

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java集合之Map集合详解

Map,HashMap集合,Map遍历,LinkedHashMap,集合中的基本方法,Map集合详解

m0_62729850的博客 2461

【Java集合】双列集合Map详解

集合框架体系图如下:本文是对集合框架中的双列集合——Map集合的一个深度总结。主要内容包括了Map集合的介绍、特点、常用方法演示、遍历方式,以及Map接口的几个常用实现类——的源码分析①Map接口与Collection接口并列存在,与Collection系列的单列集合相对,Map是双列集合,用于保存具有映射关系的数据Key-Value(键值对)②Map接口位于下,其接口定义、继承关系图如下:可以看到,Map接口常用的实现类有3个——,并且还有两个常用实现类。

m0_55908255的博客 891

java之Map集合总结

Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。 Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。 Collection中的集合称为单列集合,Map中的集合称为双列集合。 需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。 1 Map常用子类 Map常用子类有: HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保.

xiaoyong5854的博客 3052

Java Map集合、集合的嵌套

Java Map集合、集合的嵌套

zeijiershuai的博客 1162

java集合 — — Map集合

十、Map集合 10.1、概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一对应的关系,就叫做映射。Java提供了专门的集台类用来存放这种对象关系的对象,即java.util.Map接口。 接口Map<K, V> 类型参数: K - 此映射所维护的键的类型 V - 映射值的类型 将键映射到值的对象,一个映射不能包含重复的键:每个键最多只能映时到一个值。 Map接口下的集合与collection接口下的集合的对比: ● Collecti

mocoll的博客 1756

JAVA集合之Map集合

除Collection集合外,JAVA还有另一大体系集合,Map集合,相较于Collection集合,Map集合存储元素方式不同,该集合具有key(键)-value(值)映射关系,存储的元素是成对存在的对象,而key值不允许重复。 Map与Collection相同,都是接口,而相较于Collection没有那么多的分类,Map集合主要包含3个实现类HashMap、Hashtable以及TreeSe...

Fjtd_2019的博客 1019

Java集合 —— Map集合

具体实现我在之前的博客写过了集合List和Map——重写equals和hashCode方法(集合元素是类的对象)这里举一个简单的例子return age;@Override@Override做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。

2401_84097941的博客 1092

java Map集合嵌套,value为Map和value为List

java Map集合嵌套,value为Map和value为List 2013年12月13日 23:13:34wuer0520阅读数:12476 import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List...

evilcry2012的专栏 6548

Java Map集合

1、概述: Map用于保存具有映射关系的数据,Map集合里保存着两组值,一组用于保存Map的ley,另一组保存着Map的value。 2、Map集合特点: ​ 1.Map集合是一个双列集合,一个元素包含兩个値(一 个key,一个value) ​ 2.Map集合中的元素, key和value的数据类型可以相同,也可以不同 ​ 3.Map集合中的元素, key是不允午重复的, value是可以重复的 ​ 4.Map集合中的元素, ke

m0_52204142的博客 860
上一篇: Java集合--泛型集合
下一篇: Java进阶--多线程
likehack
博客等级 码龄8年 526粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

likehack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值