【从入门到起飞】JavaSE—带你了解Map,HashMap,TreeMap的使用方法

🎊专栏【Java基础】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【The truth that you leave】
🥰欢迎并且感谢大家指出我的问题

文章目录

  • 🌺双列集合的特点
  • 🎄Map
  • 🍔Map常用的API
    • ⭐创建Map集合的对象
    • ⭐添加元素
      • ✨注意
    • ⭐移除元素
    • ⭐清空元素
    • ⭐判断是否存在某个 键 / 值
    • ⭐判断集合是否为空
    • ⭐判断集合的长度
  • 🍔Map的遍历方式
    • ⭐方法一:键找值
    • ⭐方法二:键值对
      • ✨分析一下Map.Entry<String,String>
    • ⭐方法三:Lambda表达式
      • ✨分析一下new BiConsumer<String, String>()
  • 🎄HashMap
  • 🍔特点
  • 🍔例子
    • ⭐注意
  • 🎄LinkHashMap
  • 🍔特点
  • 🎄TreeMap
  • 🍔特点
    • ⭐两种排序规则

在这里插入图片描述

🌺双列集合的特点

在这里插入图片描述

  1. 双列集合一次需要存一对数据,分别是键和值
  2. 键不能重复,值可以重复
  3. 键和值是一一对应的,每一个键都能找到自己对应的值
  4. 键+值 这个整体我们称为"键值对"或者"键值对对象",在Java中称为"Entry对象"

🎄Map

🍔Map常用的API

⭐创建Map集合的对象

在这里插入图片描述

⭐添加元素

put("元素1","元素2");

在这里插入图片描述

✨注意

在添加元素的时候,如果键不存在,那么直接把 键值对对象 添加到map集合中,方法返回null
在添加元素的时候,如果键是存在的,那么会把 原来的键值对对象覆盖,把被覆盖的值进行返回
在这里插入图片描述

⭐移除元素

remove("元素");

在这里插入图片描述

⭐清空元素

clear();

在这里插入图片描述

⭐判断是否存在某个 键 / 值

在这里插入图片描述

⭐判断集合是否为空

在这里插入图片描述

⭐判断集合的长度

size();

在这里插入图片描述

🍔Map的遍历方式

⭐方法一:键找值

package com.practice;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class practicedemo {
    public static void main(String[] args) {
        Map<String,String>map=new HashMap<>();
        map.put("1","2");
        map.put("3","4");
        map.put("5","6");
        //通过键找值
            //获取所有的键,把这些键都放到一个单列集合中
        Set<String>keys=map.keySet();
        for(String key:keys){
            //利用map集合中的键获取对应的值 get
            String value=map.get(key);
            System.out.println(key+"="+value);
        }
    }
}

在这里插入图片描述

⭐方法二:键值对

package com.practice;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class practicedemo {
    public static void main(String[] args) {
        Map<String,String>map=new HashMap<>();
        map.put("1","2");
        map.put("3","4");
        map.put("5","6");
        //通过键值对
            //获取所有的键值对对象,返回一个Set集合
        Set<Map.Entry<String,String>> entries = map.entrySet();
            //遍历entries这个集合,去得到里面的每一个键值对对象
        for (Map.Entry<String,String>entry:entries){
            //通过entry调用get方法获取键和值
            String key=entry.getKey();
            String value=entry.getValue();
            System.out.println(key+"+"+value);
        }
    }
}

在这里插入图片描述

✨分析一下Map.Entry<String,String>

在这里插入图片描述
所以我们在表示Entry类型的时候,要使用Map(外部接口) . Entry去调用一下

⭐方法三:Lambda表达式

package com.practice;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

public class practicedemo {
    public static void main(String[] args) {
        Map<String,String>map=new HashMap<>();
        map.put("1","2");
        map.put("3","4");
        map.put("5","6");
        //通过lambda表达式
        	//匿名内部类的方式
        map.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String s, String s2) {
                System.out.println(s+"="+s2);
            }
        });

        System.out.println("----------------------------");

        map.forEach((String s, String s2) -> {
                System.out.println(s+"="+s2);
            }
        );

        System.out.println("----------------------------");
        
        map.forEach(( s, s2) -> System.out.println(s+"="+s2));
    }
}

在这里插入图片描述

✨分析一下new BiConsumer<String, String>()

为什么是new BiConsumer<String, String>()

我们来查看一下forEach的源码
在这里插入图片描述
继续查看BiConsumer的源码

在这里插入图片描述

Lambda表达式只能用于实现只有一个抽象方法的接口,因为BiConsumer是一个接口,所以可以使用Lambda表达式

🎄HashMap

🍔特点

  • HashMap是Map里面的一个实现类
  • 方法可以直接使用Map里面的方法
  • 特点都是由 键 决定的:无序,不重复,无索引

🍔例子

⭐注意

  • HashMap底层是哈希表结构的
  • 依赖hashCode方法和equals方法保证键的唯一
  • 如果存储的是自定义对象,需要重写hashCode和equals方法
  • 如果存储的是自定义对象,不需要重写hashCode和equals方法

Student.java

package com.itheima.a02myhashmap;

import java.util.Objects;

public class Student {
    private String name;
    private int age;


    public Student() {
    }

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

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.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);
        return name.hashCode();
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

A01_HashMapDemo1.java

package com.itheima.a02myhashmap;

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

public class A01_HashMapDemo1 {
    public static void main(String[] args) {
       /*
        需求:创建一个HashMap集合,键是学生对象(Student),值是籍贯(String)。
        存储三个键值对元素,并遍历
        要求:同姓名,同年龄认为是同一个学生

        核心点:
            HashMap的键位置如果存储的是自定义对象,需要重写hashCode和equals方法。
       */


        //1.创建HashMap的对象
        HashMap<Student,String> hm = new HashMap<>();

        //2.创建三个学生对象
        Student s1 = new Student("zhangsan",23);
        Student s2 = new Student("lisi",24);
        Student s3 = new Student("wangwu",25);
        Student s4 = new Student("wangwu",25);

        //3.添加元素
        hm.put(s1,"江苏");
        hm.put(s2,"浙江");
        hm.put(s3,"福建");
        hm.put(s4,"山东");

        //4.遍历集合
        Set<Student> keys = hm.keySet();
        for (Student key : keys) {
            String value = hm.get(key);
            System.out.println(key + "=" + value);
        }

        System.out.println("--------------------------");

        Set<Map.Entry<Student, String>> entries = hm.entrySet();
        for (Map.Entry<Student, String> entry : entries) {
            Student key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "=" + value);
        }

        System.out.println("--------------------------");

        hm.forEach((student, s)-> System.out.println(student + "=" +  s));

    }
}

在这里插入图片描述

🎄LinkHashMap

🍔特点

  • 由键决定:有序,不重复,无索引
  • 这里的有序是指保证存储和取出的元素顺序一致

在这里插入图片描述

🎄TreeMap

🍔特点

  • TreeMap和TreeSet底层原理一样,都是红黑树结构的
  • 由键决定特性:不重复,无索引,可排序
  • 可排序是可以对键进行排序,默认按照键从小到大排序,也可以自己定义键的排序规则

⭐两种排序规则

  • 实现Comparable接口,指定比较规则
  • 创建集合时传递Comparator比较器对象,指定比较规则

默认是升序排列
在这里插入图片描述
加上比较器后,可以变成降序排序

在这里插入图片描述

对比一下
HashMap效率高但是TreeMap可以排序,使用时要有所甄别

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Kettle] 单变量统计

单变量统计是对数据进行单个变量的数据统计&#xff0c;以字段为单变量&#xff0c;可以分别对多个字段进行数据统计&#xff0c;统计类型有N(统计数量)、最小值、最大值、平均值、样本标准差、中位数和任意百分位数等 数据源 2018年上学期期末考试成绩(Kettle数据集9).xlsht…

客户管理系统大盘点!推荐这五款

客户管理系统大盘点&#xff01;推荐这五款。 客户管理系统也就是CRM&#xff0c;可以说是企业刚需&#xff0c;国内外的客户管理系统也是数不胜数&#xff0c;到底有哪些是真正好用&#xff0c;值得推荐的呢&#xff1f;本文将为大家推荐这5款好用的客户管理系统&#xff1a;…

Cannot read property ‘pickAlgorithm‘ of null

Cannot read property pickAlgorithm of null 报错显示 node 和 npm的版本号不对应 查看版本号 node -v npm -v node的版本对应 Previous Releases | Node.js (nodejs.org) 我们需要改成对应的mpm版本号 npm install npm6.14.12 -g nodejs与npm版本对应关系以及使用nvm管理n…

论文阅读:“基于快速特征点提取和描述算法与色调、饱和度和明度的图像特征点匹配算法”

文章目录 摘要引言方法实验结果图像预处理结果对比图像配准结果对比 参考文献 摘要 提出了一种基于快速点特征提取和描述&#xff08;ORB&#xff09;算法与色调、饱和度和明度&#xff08;HSV&#xff09;的图像特征点匹配算法。首先利用双边滤波和均值滤波结合对图像进行预处…

vue 如何实现粘贴复制功能

实现粘贴复制功能 vue 实现粘贴复制功能&#xff0c;也可用于app中h5插件&#xff0c;共四种方法&#xff0c;特别推荐第四种方法&#xff0c;具体还需了解根据需求使用 1. 安装第三方插件方法&#xff08;不推荐&#xff09; 这种方法兼容性很好&#xff0c;如果项目只使用了…

OA流程是什么意思啊

阅读本文你将通过以下几点了解OA流程是什么意思&#xff1a;1、OA流程是什么&#xff1b;1、传统纸质化办公痛点&#xff1b;2、简道云OA流程介绍。 一、OA流程是什么 OA是Office Automation的缩写&#xff0c;意为办公自动化&#xff0c;它是一种基于现代技术的办公方式变革…

js-WebApi笔记之BOM

目录 window对象 定时器-延迟函数 location对象 navigator对象 histroy对象 本地存储 localStorage sessionStorage localStorage 存储复杂数据类型 window对象 BOM (Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScr…

2023最全的性能测试种类介绍,这6个种类特别重要!

系统的性能是一个很大的概念&#xff0c;覆盖面非常广泛&#xff0c;包括执行效率、资源占用、系统稳定性、安全性、兼容性、可靠性、可扩展性等&#xff0c;性能测试就是描述测试对象与性能相关的特征并对其进行评价而实施的一类测试。 性能测试是一个统称&#xff0c;它其实包…

C语言--每日五道选择题--Day19

第一题 1. 为了避免在嵌套的条件语句if-else中产生二义性&#xff0c;C语言规定else子句总是与&#xff08; &#xff09;配对。 A&#xff1a;缩排位置相同的if B&#xff1a;之前最近的未匹配的if配对 C&#xff1a;其之后最近的if D&#xff1a;同一行上的if 答案及解析 B e…

终端仿真软件 SecureCRT v9.4.2

SecureCRT是一款终端仿真软件&#xff0c;它提供了类似于Telnet和SSH等协议的远程访问功能。SecureCRT专门为网络管理员、系统管理员和其他需要保密访问网络设备的用户设计。 SecureCRT具有以下特点&#xff1a; 安全性&#xff1a;SecureCRT支持SSH1、SSH2、SSL和TLS等加密和…

PPT基础:编辑顶点

目录 编辑顶点对顶点的编辑对线段的编辑编辑顶点用法 编辑顶点 所在位置&#xff1a; 实质&#xff1a;是一种改变图像性质的操作 如何把一个圆形变成三角形&#xff1a;选中其中一个顶点&#xff0c;右键删除一个顶点&#xff1b;靠近某一条边&#xff0c;右键“拉伸弓形”即…

【机器学习基础】K-Means聚类算法

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;相对完整的机器学习基础教学&#xff01; ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战…

信驰达科技加入智慧车联产业生态联盟ICCE,共创智慧车联未来

图1 信驰达加入智慧车联产业生态联盟 信驰达拥有60余项专利认证及软件著作权&#xff0c;以及BQB、SRRC、FCC、IC、CE、RoHS、REACH、KCC等数百个权威产品认证&#xff0c;公司是车联网联盟(CCC)和智慧车联产业生态联盟&#xff08;ICCE&#xff09;会员&#xff0c;已通过ISO…

RFID井盖管理系统解决方案

随着我国城市基础设施建设事业的迅速发展&#xff0c;城市中的通讯、燃气、给水、排水、热力、电力等各类市政公用地下管线设施不断增加&#xff0c;相应地&#xff0c;城市路面上的井盖也越来越多。然而&#xff0c;近年来&#xff0c;由于城市井盖管理不善&#xff0c;井盖被…

DP1332E/DP1363F国产多协议NFC读写器芯片支持ISO15693/ISO18092

目录 ISO/IEC 15693与ISO/IEC 18092协议标准差异DP1363F与DP1332E对比共同点主要差异点 ISO/IEC 15693与ISO/IEC 18092协议标准差异 ISO/IEC 15693是用于近距离无线通信中的射频识别&#xff08;RFID&#xff09;技术的标准协议&#xff0c;它定义了与读写器之间的通信协议。这…

【技巧】Word和Excel如何互相转换?

Word文档里有数据表格&#xff0c;如果编辑修改起来感觉没那么方便或容易出错&#xff0c;不妨将文档转换成Excel表格再来处理。 将Word文档转换成Excel&#xff0c;比较常用的是复制粘贴方法&#xff0c;也就是将Word文档的表格复制后&#xff0c;再粘贴到Excel表格里&#x…

webshell免杀之传参方式

1.Cookie 由于Cookie基本上是每个web应用都需要使用到的&#xff0c;php应用在默认情况下&#xff0c;在Cookies请求头中会存在一个PHPSESSIDxxxx这样的cookie&#xff0c;其实这个就可以成为我们的传参位置 使用burp抓包将内容改成base64加密后的命令 可以看到已经执行成功了…

这两个让你直呼卧槽的软件,超级实用

不知道大家有没有碰到这种情况呢&#xff1f;在手机上解压文件解压不了&#xff0c;还得去电脑上下载之后解压&#xff0c;特别麻烦 为了解决这一问题&#xff0c;所以今天给大家准备 两款 解压缩 神器&#xff0c;让大家解的越来越熟练。 解压精灵 解压精灵这是一款解压缩并且…

【已解决】移动号码在移动网上营业厅更换为8元保号套餐

有很多人的副卡基本是为了接收银行卡短信&#xff0c;平时基本不打电话和用流量&#xff0c;每个月固定消费在18-30左右&#xff0c;很浪费。今天发现在网上营业厅就可以修改8元保号套餐&#xff0c;分享给大家。 保号套餐 有以下两种&#xff1a; 解决办法&#xff1a; 1、…

PHM对复杂控制系统的状态监控及故障诊断

背景 该型号复杂控制系统是由7台各种车辆组成的复杂电子、机械复合系统&#xff0c;这些系统通过数据总线连接在一起&#xff0c;总线数据中既有控制指令数据也有执行响应数据或BIT数据&#xff0c;这些数据可以作为系统健康状态评估或故障诊断的依据&#xff0c;然而在以往类…
最新文章