Map集合的概述和接口的使用

news2024/11/25 16:30:02

目录

一、Map集合概述

 1.Map接口的特点

2.方法

二、Map接口的使用

三、Map集合的实现类

1.HashMap

2.Hashtable

3.Properties

4.TreeMap


一、Map集合概述

 1.Map接口的特点

(1)用于存储任意键值对

(2)键:无序、无下标、不允许重复(唯一)

(3)值:无序、无下标、允许重复

2.方法

V put(K key,V value);  //将对象存入到集合中,关联键值。key重复则覆盖原值

Object get(Object key)//根据键值获取对应的值。

Set<K>    //返回所有的key。

Collection<V> values()    //返回包含所有值的Collection集合。

二、Map接口的使用

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

/**
 * Map接口的使用
 * 特点:1.存储键值对   2.键不能重复,值可以重复    3.无序
 */
public class Demo01 {
    public static void main(String[] args) {
        //创建Map集合
        Map<String,String> map = new HashMap<>();
        //1.添加元素
        map.put("china","中国");
        map.put("uk","英国");
        map.put("usa","美国");
        System.out.println("元素个数:" + map.size());
        System.out.println(map.toString());
        System.out.println("----------------");
        //2.删除
        map.remove("usa");
        System.out.println("删除后的元素个数:"+map.size());
        System.out.println("----------------");
        //3.遍历
        //(1)使用keySet();
        for (String key : map.keySet()){
            System.out.println(key+"---"+map.get(key));
        }
        System.out.println("----------------");
        //(2)使用entrySet()方法
        for (Map.Entry<String,String> entry : map.entrySet()){
            System.out.println(entry.getKey()+"-------"+entry.getValue());
        }
        System.out.println("----------------");
        //4.判断
        System.out.println(map.containsKey("cn"));
        System.out.println(map.containsValue("中国"));
    }
}

三、Map集合的实现类

1.HashMap

线程不安全,运行效率快,允许用null作为key或是value。

测试类:

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

/**
 * HashMap集合的使用
 * 存储结构:哈希表(数组+链表+红黑树)
 * 使用key可hashcode和equals作为重复
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        //创建集合
       HashMap<Student,String> students = new HashMap<Student,String>();
       //1.添加元素
        Student s1 = new Student("孙悟空",143546);
        Student s2 = new Student("猪八戒",5633421);
        Student s3 = new Student("哮天犬",23435);
        students.put(s1,"北京");
        students.put(s2,"上海");
        students.put(s3,"深圳");
        students.put(new Student("哮天犬",23435),"南京");
        System.out.println("元素个数:"+students.size());   //元素个数:3
        System.out.println(students.toString());
        System.out.println("--------------------");
        //2.删除元素
        students.remove(s1);
        System.out.println("删除之后的元素个数:"+students.size());
        System.out.println("--------------------");
        //3.遍历
        //(1)使用keySet();
        for (Student key : students.keySet()){
            System.out.println(key.toString()+"---"+students.get(key));
        }
        System.out.println("--------------------");
        //(2)使用entrySet()方法
        for (Map.Entry<Student,String> entry : students.entrySet()){
            System.out.println(entry.getKey()+"---"+students.entrySet());
        }
        System.out.println("--------------------");
        //4.判断
        System.out.println(students.containsKey(s1));
        System.out.println(students.containsValue("北京"));
    }
}

学生类:

import java.util.Objects;

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

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

    public Student() {
    }

    public String getName() {
        return name;
    }

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

    public int getStuNo() {
        return stuNo;
    }

    public void setStuNo(int stuNo) {
        this.stuNo = stuNo;
    }

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

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", stuNo=" + stuNo +
                '}';
    }
}

2.Hashtable

线程安全,运行效率慢,不允许null作为key或是value。

3.Properties

Hashtable的子类,要求key和value都是String,通常用于配置文件的读取。

4.TreeMap

实现了SortedNap接口(是Map的子接口),可以对key自动排序。

使用:

import java.util.Map;
import java.util.TreeMap;

/**
 * TreeMap的使用
 * 存储结构:红黑树
 */
public class Demo3 {
    public static void main(String[] args) {
        //新建集合
        TreeMap<Student,String> treeMap = new TreeMap<Student,String>();
        //1.添加元素
        Student s1 = new Student("孙悟空",143546);
        Student s2 = new Student("猪八戒",5633421);
        Student s3 = new Student("哮天犬",23435);
        treeMap.put(s1,"北京");
        treeMap.put(s2,"上海");
        treeMap.put(s3,"广东");
        System.out.println("元素个数:"+treeMap.size());
        System.out.println(treeMap.toString());
        System.out.println("-----------------");
        //2.删除
        treeMap.remove(s1);
        System.out.println(treeMap.size());
        System.out.println("-----------------");
        //3.遍历
        //(1)使用keySet
        for (Student key : treeMap.keySet()){
            System.out.println(key+"--"+treeMap.get(key));
        }
        System.out.println("-----------------");
        for (Map.Entry<Student,String> entry : treeMap.entrySet()){
            System.out.println(entry.getKey()+"----"+entry.getValue());
        }
        System.out.println("-----------------");
        //4.判断
        System.out.println(treeMap.containsKey(new Student("孙悟空",143546)));
    }

}

学生类:

import java.util.Objects;

public class Student implements Comparable<Student>{
    private String name;
    private int stuNo;

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

    public Student() {
    }

    public String getName() {
        return name;
    }

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

    public int getStuNo() {
        return stuNo;
    }

    public void setStuNo(int stuNo) {
        this.stuNo = stuNo;
    }

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

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", stuNo=" + stuNo +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        int n2 = this.stuNo-o.getStuNo();   //只比较学号
        return n2;
    }
}


定制规则:

 

重在理解!

感谢ლ(°◕‵ƹ′◕ლ)!!!

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

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

相关文章

阿里P8整合深入理解Dubbo实战+Kafka+分布式设计核心原理内部手册

一 深入理解Apache Dubbo与实战 近年来&#xff0c;随着业务规模的发展和复杂度的增加&#xff0c;传统的单体应用已经很难适应业务迭代的诉求&#xff0c;越来越多的公司开始进行服务化的改造。很高兴看到ApacheDubbo被许多公司采用&#xff0c;作为服务化改造的基础架构进行…

学习常用算法——python

常用算法 时间复杂度 在日常生活中, 我们描述物体的重量使用的是kg, 描述物体的长度使用的是m, 那么相对的, 在计算机科学中也需要一种度量来定性地描述算法的运行时间, 这种度量方法称为大O表示法. 声明f(n)作为我们的函数, n表示的参数. 不同的参数会导致算法运行的时间不同…

超低延时4K级可定制化专业视觉计算平台

> 内置超低延时4K30 ISP IP&#xff0c;ISP延时 0.7 ms > 内置GigE vision IP支持 GigE Vision2.0、GenICam V2.4.0标准&#xff0c;支持用户自定义XML描述文件 > 内置工业机器视觉行业标准的U3 vison IP > 基于FPGA,支持Bayer、YCbCr、RGB等格式,满足高帧率/高…

ElementUI实现在下拉列表里面进行搜索

分析: 首先我们需要实现上图的效果,然后Element-UI的el-select是没有的,所以需要自己写我们需要用到el-popover组件,然后使用它的v-model"visible"来实现控制显示我们在el-popover的slot"reference" 放一个el-select 使用popper-append-to-body"false…

C++ 之 移动构造函数

1、左值和右值 C( 包括 C) 中所有的表达式和变量要么是左值&#xff0c;要么是右值。 通俗的左值的定义就是非临时对象&#xff0c;那些可以在多条语句中使用的对象&#xff0c;表达式结束后依然存在的持久化对象&#xff0c;所有的具名变量或者对象都是左值。右值是指临时的…

<Android开发> Android vold - 第一篇 vold前言简介

本次主要讲解存储模块如U盘等设备在android设备中的管理和使用的模块。本次主要基于android 8.1版本进行解析。不同android版本 vold的内容可能会有所差异。读者可对比阅读解析。 1 Vold介绍 Android中Vold是volume Daemon,即Volume守护进程;Android没有使用Linux平台下的ud…

泛型的介绍和使用方法

目录 一、泛型概述 二、泛型类 三、泛型接口 1.直接在实现类中确定好类型 2.实现类也写成泛型类 四、泛型方法 五、泛型好处 六、泛型集合 1.概念 2.特点 一、泛型概述 1. 本质是参数化类型&#xff0c;把类型作为参数传递。 2. 常见的形式有泛型类、泛型接口、泛型…

【虚幻引擎】UE4/UE5 后期处理盒子(PostProcessVolume)

一、简介 PostProcessVolume&#xff08;后期处理盒子&#xff09;&#xff1a;UE4非常强大的一个后期处理&#xff0c;可以调节画面的色彩&#xff0c;相机的景深&#xff0c;视频的输出效果&#xff0c;环境的光线构造&#xff0c;电影级的氛围感。 二、参数介绍 一、场景中…

驱动开发 Linux按键中断点灯

华清远见上海中心22071班 三个按键实现按键中断&#xff0c; key1->led1 key2->led2 key3->led3 按键按一下灯亮&#xff0c;再按一下灯灭 #include <linux/module.h> #include <linux/init.h> #include <linux/cdev.h> #include <linux/f…

外贸供应链ERP怎么选?全流程综合管理解析

随着外贸体制深入改革、进出口权放开等&#xff0c;以往处于垄断地位&#xff0c;享有种种优惠政策的外贸企业&#xff0c;将面临越来越严峻的国内外市场的竞争及各种挑战。长期以来形成的相对落后的管理体制和经营模式&#xff0c;严重地影响外贸企业在新形势下的生存和发展。…

m基于GA遗传优化+SA模拟退火的混合改进算法的多产品多机器生产优化matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 这里&#xff0c;我们首先介绍一下改进算法的基本原理&#xff0c;按照前面说的&#xff0c;这里我们主要将GA和SA进行合并。 这里&#xff0c;我研究了下&#xff0c;将两种算法做如下方法的结合…

Microcorruption 第一关 Tutorial

Microcorruptioin 第一关 Tutorial 首先进入Tutorial这一关&#xff0c;这是闯关页面。 在主函数设置断点&#xff0c;控制台输入"break main"或"b main"或手动点击反汇编栏中main函数的第一行设置断点。 该闯关游戏主要是破解密码&#xff0c;查看主函数…

前端开发免费资源分享

Fancy-Border-Radius 地址&#xff1a;https://9elements.github.io/fancy-border-radius/ 简介&#xff1a;在线编辑border-radius的可视化工具&#xff0c;通过调节可以很方便地帮我们生成想要的形状&#xff0c;然后直接复制下面的css代码&#xff0c;即可使用 Make some …

sCrypt 合约中的椭圆曲线算法:第二部分

我们在脚本中实现了椭圆曲线 (EC) 算法。在之前的实现中&#xff0c;我们进行链下计算并在脚本中验证结果。我们这里直接用脚本计算。 基于EC的应用非常多&#xff0c;特别是在密码学领域&#xff0c;如数字签名、加密、承诺方案等。作为具体示例&#xff0c;我们重新实现了 E…

11.28作业

实现对点灯所涉及函数的封装 1.头文件 #ifndef __GPIO_H__ #define __GPIO_H__ //结构体封装 typedef struct{volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigned int OSPEEDR;volatile unsigned int PUPDR;volatile unsigned int IDR;volatile un…

Kotlin进阶指南 - 单元测试

为了减少一些功能繁琐的测试流程&#xff0c;单元测试是提升开发效率的有效方式之一 在早些年的时候我有记录过一篇 Android 使用单元测试&#xff0c;只不过当时更多的针对 Java 方面的单元测试&#xff1b;在使用 Kotlin 后&#xff0c;我发现单元测试有点不同&#xff0c;好…

Nacos注册中心和服务消费方式

目录 一&#xff0c;服务治理介绍 什么是服务治理&#xff1f; 常见的注册中心 二&#xff0c;nacos简介 三&#xff0c;搭建nacos环境 四&#xff0c;代码演示 五&#xff0c;基于Feign实现服务调用 什么是Feign Feign的使用 Feign参数传递 一&#xff0c;服务治理介…

全国心力衰竭日:重症心衰的黑科技——永久型人工心脏

今天是第8个“全国心力衰竭日”。近几年&#xff0c;中国逐渐老龄化&#xff0c;心衰则是老龄化面临的严峻问题。我国心衰患病率估计已达1.3%&#xff0c;至少有1000万心力衰竭患者。中国已成为世界上拥有最大心衰患者群的国家之一。心力衰竭作为大多数心血管疾病的终末阶段&am…

如何在 docker 容器使用 nginx 实现反向代理统一站点入口

在微服务架构下&#xff0c;我们会部署很多微服务来实现我们的系统。每个微服务会有不同的端口。而用户在访问我们的站点时希望通过统一的端口来访问所有的服务&#xff0c;因为在很多情况下用户只能通过 80 或者 443 端口访问外界服务。 这个时候我们就可以使用反向代理来实现…

云上“两地三中心”,中小企业都用得起的多保险灾备方案

在云时代&#xff0c;大部分中小型企业都奔跑在云上或是服务器托管公司。任何规模的数据中心服务中断都会让你的企业踩雷。据统计&#xff0c;80%的数据中心服务中断都是由服务器硬件造成的。 据万博智云不完全统计&#xff1a; 2021年3月&#xff0c;一场大火完全摧毁了OVH在…