学习笔记22 map

这篇具有很好参考价值的文章主要介绍了学习笔记22 map。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概论

map的每个元素都由两个部分组成:键和值。每个键都与一个特定的值相关联,并且可以用于定位该值。

map和set很像,只不过map存储的是key,由key再映射到value,而set存储的就是value本身。

Map接口是泛型的,由两个类型变量K和V进行参数化。它们分别代表表示键和值对象的类型。

map接口:

学习笔记22 map,学习,笔记

学习笔记22 map,学习,笔记

如果我们想要得到map的键和值:

 特别的,对于Set< Map.Entry<K,V> > entrySet()

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);

Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}

Key = apple, Value = 1
Key = banana, Value = 2
Key = orange, Value = 3

这个方法返回一个set,set中的元素是map中的每个键值对 。

为什么非要用这个方法才能得到键值对?为什么不能直接对map集合用get方法?因为对map集合直接用get方法是通过键返回值。

二、HashMap Class

1.构造器

学习笔记22 map,学习,笔记

学习笔记22 map,学习,笔记

 2.几种常用的方法

我们用一个例子来过一遍HashMap常用的方法

import java.util.*;

public class CarHashMap1 {
    public static void main(String[] args) {
        // 创建一个HashMap来存储Car对象
        Map<String, Car> carMap = new HashMap<>();

        // 创建一些Car对象
        Car vw = new Car("227H54", "1997 Volkswagen");
        Car mustang = new Car("448A69", "1965 Mustang");
        Car porsche = new Car("453B55", "2007 Porsche");
        Car bmw = new Car("177R60", "1980 BMW");

        // 将一些映射关系添加到HashMap中。在每个映射关系中,车辆的VIN是键,包含该VIN的Car对象是值。
        carMap.put(vw.getVin(), vw);
        carMap.put(mustang.getVin(), mustang);
        carMap.put(porsche.getVin(), porsche);
        carMap.put(bmw.getVin(), bmw);

        // 按VIN搜索Mustang
        System.out.println("\nSearching for the car with VIN " + mustang.getVin());
        Car foundCar = carMap.get(mustang.getVin());

        // 如果找到了车辆,则显示它。
        if (foundCar != null)
            System.out.println(foundCar);
        else
            System.out.println("The Mustang is NOT in the set.");

        // 搜索另一个VIN。这个VIN不在集合中。
        System.out.println("\nSearching for the car with VIN 911C87");
        foundCar = carMap.get("911C87");

        // 如果找到了车辆,则显示它。
        if (foundCar != null)
            System.out.println(foundCar);
        else
            System.out.println("That car is NOT in the set.");
    }
}

Searching for the car with VIN 448A69

VIN: 448A69 Description: 1965 Mustang

Searching for the car with VIN 911C87

That car is NOT in the set.

构造一个hashmap:

Map<String, Car> carMap = new HashMap<>();

Note that the Map interface has been specialized to Map because String is the data type of the keys and Car is the data type of the values  

 向hashmap中添加键值对:

carMap.put(vw.getVin(), vw);

在hashmap中找键对应的值:

Car foundCar = carMap.get(mustang.getVin());

3.遍历hashmap

与Set<E>和List<E>接口不同,Map<K, V>接口没有扩展Collection<E>接口。而且,与其他集合类型不同,Map并不提供迭代器。如果要遍历Map,我们需要将其映射关系转换为其他collection。

例如,可以使用keySet()方法获取一个包含Map中所有键的Set Collection,也可以使用values()方法获取一个包含Map中所有值的Collection。然后可以对得到的Set或Collection进行迭代。

import java.util.*;

public class CarHashMap2 {
    public static void main(String[] args) {
        // 创建一个HashMap来存储Car对象
        Map<String, Car> carMap = new HashMap<>();

        // 创建一些Car对象
        Car vw = new Car("227H54", "1997 Volkswagen");
        Car mustang = new Car("448A69", "1965 Mustang");
        Car porsche = new Car("453B55", "2007 Porsche");
        Car bmw = new Car("177R60", "1980 BMW");

        // 将一些映射关系添加到HashMap中。在每个映射关系中,车辆的VIN是键,包含该VIN的Car对象是值。
        carMap.put(vw.getVin(), vw);
        carMap.put(mustang.getVin(), mustang);
        carMap.put(porsche.getVin(), porsche);
        carMap.put(bmw.getVin(), bmw);

        // 获取一个包含Map中所有键的Set集合。
        Set<String> keys = carMap.keySet();

        // 遍历所有键,打印每个键。
        System.out.println("Here are the keys:");
        for (String k : keys)
            System.out.println(k);

        // 获取一个包含Map中所有值的Collection集合。
        Collection<Car> values = carMap.values();

        // 遍历所有值,打印每个值。
        System.out.println("\nHere are the values:");
        for (Car c : values)
            System.out.println(c);
    }
}

Here are the keys:

177R60

227H54

448A69

453B55

Here are the values:

VIN: 177R60 Description: 1980 BMW

VIN: 227H54 Description: 1997 Volkswagen

VIN: 448A69 Description: 1965 Mustang

VIN: 453B55 Description: 2007 Porsche

从keySet()和values()方法返回的Set和Collection都作为对Map的“视图”。集合和集合中的元素仅仅是对Map中实际条目的引用因此在集合或集合中对元素所做的任何更改都会反映使用这种方法得到的Map中,反之亦然。换句话说,如果更改了Map中的条目,那么在Set和Collection中引用该条目的元素也会相应地更改。 

这里我们返回了两个set,反别存储key和value,当然我们也可以用一个set存放整个键值对,这里我们需要用到entrySet method

import java.util.*;

public class CarHashMap3 {
    public static void main(String[] args) {
        // 创建一个HashMap来存储Car对象
        Map<String, Car> carMap = new HashMap<>();

        // 创建一些Car对象
        Car vw = new Car("227H54", "1997 Volkswagen");
        Car mustang = new Car("448A69", "1965 Mustang");
        Car porsche = new Car("453B55", "2007 Porsche");
        Car bmw = new Car("177R60", "1980 BMW");

        // 将一些映射关系添加到HashMap中。在每个映射关系中,车辆的VIN是键,包含该VIN的Car对象是值。
        carMap.put(vw.getVin(), vw);
        carMap.put(mustang.getVin(), mustang);
        carMap.put(porsche.getVin(), porsche);
        carMap.put(bmw.getVin(), bmw);

        // 获取一个包含Map中所有映射关系的Set<Map.Entry<String, Car>>。
        Set<Map.Entry<String, Car>> cars = carMap.entrySet();

        // 遍历所有映射关系,输出每个映射关系的键和值。
        System.out.println("Here are the mappings:");
        for (Map.Entry<String, Car> entry : cars) {
            System.out.println("Key =" + entry.getKey());
            System.out.println("Value =" + entry.getValue());
            System.out.println();
        }
    }
}
Here are the mappings:
Key = 177R60
Value = VIN: 177R60 Description: 1980 BMW
Key = 227H54
Value = VIN: 227H54 Description: 1997 Volkswagen
Key = 448A69
Value = VIN: 448A69 Description: 1965 Mustang
Key = 453B55
Value = VIN: 453B55 Description: 2007 Porsche
The getKey method returns the key and getValue returns the value.
在java8之后,对于map,我们也有对应的forEach方法:
void forEach(BiConsumer<? super K,? super V> action)

这个操作必须实现BiConsumer<? super K,? super V>接口。这意味着操作函数必须具有与类型 (K, V) → void 相关的类型;它的参数是一个键和一个值,其返回类型为void。

使用这个方法,我们可以对上面的例子做出如下修改:

System.out.println("Here are the mappings:");
carMap.forEach( (key, value) −>
 {
 System.out.println("Key = " + key);
 System.out.println("Value = " + value);
 System.out.println();
 });

三、LinkedHashMap Class

LinkedHashMap类是HashMap的子类,它允许按照以下两种顺序访问其中的映射关系:
- 插入顺序:按照映射关系插入到Map中的顺序进行访问。
- 访问顺序:按照映射关系最近一次被访问的时间进行访问。

LinkedHashMap通过内部的链表引用映射关系。如果在插入顺序模式下使用该Map,则链表按照插入顺序引用映射关系。如果在访问顺序模式下使用该Map,则链表按照使用put或get方法访问映射关系的顺序进行引用。

在访问顺序模式下,最常访问的映射关系位于链表的末尾,最少访问的映射关系位于链表的开头。这种模式在需要知道哪些数据项被最多或最少访问的应用程序中非常有用。

学习笔记22 map,学习,笔记

四、TreeMap Class 

我们使用TreeMap类来创建一个按键排序的Map。

SortedMap接口中定义了一些与排序相关的方法,例如:按键排序的方法(keySet()、subMap()、headMap()和tailMap()),以及按照键所在的顺序返回映射关系的方法(firstKey()、lastKey()等)等。TreeMap类可以使用这些方法来按照键排序存储映射关系。当然,为了使TreeMap可以按照键进行排序,TreeMap要求其键必须是可比较的(即,实现了Comparable接口或传入了一个Comparator对象)。

学习笔记22 map,学习,笔记文章来源地址https://www.toymoban.com/news/detail-612531.html

到了这里,关于学习笔记22 map的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web安全学习笔记【22】——文件上传(1)

    WEB攻防-PHP应用文件上传函数缺陷条件竞争二次渲染黑白名单JS绕过 演示案例: PHP-原生态-文件上传-前后端验证 PHP-原生态-文件上传-类型文件头验证 PHP-原生态-文件上传-后缀黑白名单验证 PHP-原生态-文件上传-解析配置二次渲染 PHP-原生态-文件上传-逻辑缺陷函数缺陷 #知识点

    2024年04月17日
    浏览(40)
  • Maven学习笔记(单一架构案例)22版

    目录 第一节 创建工程,引入依赖 1 架构 ①架构的概念 ②单一架构 2 创建工程 3 引入依赖 ①搜索依赖信息的网站 ②持久化层所需依赖 ③表述层所需依赖 ④辅助功能所需依赖 ⑤最终完整依赖信息 4 建包  第二节 搭建环境:持久化层 1 数据建模 ①物理建模 ②逻辑建模 2 数据

    2024年02月06日
    浏览(30)
  • AXI Memory Mapped To PCI Express手册学习笔记

    1,名词解释 名词 说明 MSI Messaged Signaled Interrupt TLP Transaction Layer Packets BAR Base Address Registers 2,Memory Map。基地址的值可通过C_BASEADDR配置 MSI_Vector_Num(PCIE核的输入):请求一个MSI中断时的矢量值,上位机根据这个矢量值来判断产生的是什么中断,msi最大支持32个矢量中断。 问题:

    2024年02月12日
    浏览(37)
  • WPF实战学习笔记22-添加自定义询问窗口

    详细代码:https://github.com/DongLiqiang/Mytodo/commit/221de6b2344d5c861f1d3b2fbb2480e3e3b35c26 添加自定义询问窗口显示方法 修改文件Mytodo.Extensions.DialogExtension 添加内容,类中添加内容 自定义窗体 自定义界面 添加文件Mytodo.Views.MsgView.xaml 添加窗体模型 添加文件:Mytodo.ViewModels.MsgViewModel 依赖

    2024年02月15日
    浏览(45)
  • Mybatis-Plus《学习笔记(22版尚硅谷)》

    MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。 无侵入 :只做增强不做改变,引入它不会

    2024年02月09日
    浏览(41)
  • 【Elasticsearch学习笔记二】es的Mapping字段映射、Mapping字段常用类型、Mapping映射的创建、查看和更新、es数据迁移、ik分词器

    目录 1、Mapping字段映射概述 2、Mapping字段常用类型 3、映射中对时间类型详解 1)采取自动映射器来映射 2)手工映射提前指定日期类型 4、ES的keyword的属性ignore_above 5、Mapping映射的查看和创建 1)查看mapping信息:GET 索引名/_mapping 2)创建映射:PUT /索引名 3) 查看所有索引映

    2024年01月20日
    浏览(61)
  • Linux学习笔记(四)Ubuntu 22.04 更换国内源

    在终端输入: 显示如下: codename为jammy,需要添加jammy的下载源

    2024年02月08日
    浏览(47)
  • itop-3568开发板驱动学习笔记(22)设备树(一)设备树基础

    《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 什么是设备树 设备树是保留着存在于系统中的设备信息,当机器引导时,OS通过使用驱动程序和其他组件获得的信息建立此树,并且当添加或删除设备时更新此树。 上一篇笔记提到了平台设备模型,它将设备和驱动区

    2024年02月13日
    浏览(44)
  • IC学习笔记22——memory_compiler&memory_wrapper

    memory_compiler为一系列工具的统称,用于生成芯片开发所需要的memory。芯片开发中所需要的memory为sram、rom等。很多公司都有自己开发的memory_compiler工具。 sram写操作(写1) 将要写入的数据“1”通过写入电路变成“1”和“0”后分别加到选中单元的两条位线BL,BLB上,此时使WL=1,

    2024年02月09日
    浏览(54)
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网

    IEEE 802.11是由IEEE(电气和电子工程师协会)为无线局域网制定的第一个版本,定义了无线网络通信的标准,它对应于OSI模型中的 物理层 和 数据链路层 的介质访问控制(MAC)两层。 数据链路层分为两个子层,分别是LLC(逻辑链路控制层)和MAC(介质访问控制),前者与硬件

    2024年01月15日
    浏览(90)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包