java 中Map详解及实例代码

下面是完整的“java 中Map详解及实例代码”攻略。

什么是Map?

Map是一种用来存储键-值对数据的数据结构,常用于数据缓存、数据筛选等场景。

Map是一种抽象的数据类型,Java中通过接口Map来定义Map类型。Map接口的实现类有:HashMap、TreeMap、LinkedHashMap 等。

HashMap

什么是HashMap

HashMap 是 Java 中常用的散列表,常用于缓存、索引等场景。HashMap 继承了AbstractMap类,实现了Map、Cloneable、Serializable这些接口。

HashMap的特点

  • HashMap 存储键值对,键是唯一的,如果重复了则覆盖,值可以为空。
  • HashMap 使用哈希算法,支持快速访问和快速插入。
  • HashMap 允许 null 键和 null 值。但为了避免 NullPointerException,建议不要使用 null 作为键。

HashMap的实现

HashMap 内部维护了一个 Entry 数组表,每个 Entry 内部包含了 key、value 和 next 三个属性,其中 next 指向的是下一个 Entry。

HashMap 通过哈希函数计算key的哈希值,根据哈希值摆放该 Entry 将要存放的位置,在决定存放位置时,若发现该位置已有 Entry,则通过next指针指向下一个 Entry ,依次类推,直到找到空位为止。同时,当HashMap大小超过阈值(默认是16),则会自动进行扩容。

HashMap的示例代码

import java.util.*;

public class HashMapExample {
    public static void main(String[] args) {
        //创建一个HashMap对象
        Map<String, String> map = new HashMap();

        //添加键值对
        map.put("apple", "苹果");
        map.put("banana", "香蕉");
        map.put("peach", "桃子");

        //获取键值对
        String value1 = map.get("apple");
        String value2 = map.get("banana");
        String value3 = map.get("peach");
        System.out.println("apple 对应的值为:" + value1);
        System.out.println("banana 对应的值为:" + value2);
        System.out.println("peach 对应的值为:" + value3);

        //获取所有键的集合
        Set<String> keySet = map.keySet();
        System.out.println("所有键的集合为:" + keySet);

        //获取所有值的集合
        Collection<String> values = map.values();
        System.out.println("所有值的集合为:" + values);

        //删除键值对
        map.remove("apple");
        System.out.println("删除 apple 后,map 中的键值对为:" + map);
    }
}

TreeMap

什么是TreeMap

TreeMap 是 Java的红黑树实现的一种Map,支持有序存储键值对。

TreeMap的特点

  • TreeMap 中的所有键值对都是有序的。具体来说,存储在 TreeMap 中的键值对会按照键的自然顺序排列,或者根据构造函数中提供的 Comparator 进行排序。
  • TreeMap 的键值对只保留了一份,即只有一个 key 对应一个 value,多次插入同一 key 值会覆盖之前的 value。
  • TreeMap 中的键和值都不允许为 null。

TreeMap的实现

由于 TreeMap 内部是通过红黑树来实现的,因此它的查找、插入等操作的复杂度并不固定,而是取决于红黑树的高度。一棵高度为h的红黑树的高度大约为 2log(n+1)(其中n为节点总数),因此 TreeMap 的复杂度与节点数成对数关系。

TreeMap的示例代码

import java.util.*;

public class TreeMapExample {
    public static void main(String[] args) {
        //创建一个TreeMap对象
        Map<String, String> map = new TreeMap();

        //添加键值对
        map.put("apple", "苹果");
        map.put("banana", "香蕉");
        map.put("peach", "桃子");

        //获取键值对
        String value1 = map.get("apple");
        String value2 = map.get("banana");
        String value3 = map.get("peach");
        System.out.println("apple 对应的值为:" + value1);
        System.out.println("banana 对应的值为:" + value2);
        System.out.println("peach 对应的值为:" + value3);

        //获取所有键的集合
        Set<String> keySet = map.keySet();
        System.out.println("所有键的集合为:" + keySet);

        //获取所有值的集合
        Collection<String> values = map.values();
        System.out.println("所有值的集合为:" + values);

        //删除键值对
        map.remove("apple");
        System.out.println("删除 apple 后,map 中的键值对为:" + map);
    }
}

以上就是“java 中Map详解及实例代码”的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 中Map详解及实例代码 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 线程间通信的作用是什么?

    以下是关于线程间通信作用的完整使用攻略: 线程间通信的作用 线程间通信是指多个线之间通过共享内存或消息传递等方式来实现数据的交换和调工作的过程。线程间通信的作用主要有以下几个方面: 1. 避免竞争和冲突 在线程编程中,如果多个线程同时访问共享资源,就会出现竞争和冲的情况,导致程序的不稳定不可预测性。通过线程间通,可以实现对共享资源的访问控制,避免线程之间的竞…

    Java 2023年5月12日
    00
  • java中最易犯错的特殊字符示例详解

    Java中最易犯错的特殊字符示例详解 在Java的开发过程中,有些特殊字符容易被忽略或错误使用,这会导致程序出现难以发现的错误,本文将详细介绍这些特殊字符及其正确使用方法。 转义字符 转义字符是由反斜杠()后面跟上一个特殊字符组成的。它们的作用是告诉编译器,“我不是一个普通字符,而是需要特殊处理的字符。”以下是常见的转义字符及其用途: \n:换行符 \t:制…

    Java 2023年5月27日
    00
  • Java 安全模型,你了解了吗

    Java 安全模型,你了解了吗? Java是一种广泛用于应用程序和互联网的编程语言,其安全模型可确保Java代码执行时的安全性和完整性,从而使Java成为一种极具安全性的编程语言。下面来介绍Java安全模型的完整攻略。 Java安全模型基础 Java安全模型是由Java运行环境提供的一种安全机制,它通过控制Java程序访问资源的方式来保护主机和网络中的资源。…

    Java 2023年5月24日
    00
  • Mybatis的Dao层实现原理分析

    接下来我将详细讲解Mybatis的Dao层实现原理分析的完整攻略。 什么是Dao层 Dao层是指数据访问层,它负责与数据库进行交互,完成数据的增、删、改、查等操作。在Dao层中,最常用的是SQL语句。Mybatis是一种主流的持久层框架,它的Dao层实现原理值得深入学习。 Mybatis的Dao层实现原理 1. 配置文件 Mybatis框架使用XML文件来配…

    Java 2023年5月20日
    00
  • Java 分位点(分位值)计算方式

    当需要将一组数据进行分布分析时,可以通过计算分位点(quantile),常用的分位点有中位数、上四分位数、下四分位数等。在Java中,可以使用Apache Commons Math库来计算分位点,本文将介绍Java分位点计算方式的完整攻略。 引入依赖 要使用Apache Commons Math库,需要在pom.xml文件中添加以下依赖: <depen…

    Java 2023年5月26日
    00
  • springboot中报错Invalid character found in the request的解决

    针对 “springboot中报错Invalid character found in the request” 这个问题,一般是由于请求参数中含有非法的字符造成的。针对这个问题,可以从以下几个方面进行排查和解决: 确认请求参数格式 首先,我们需要检查请求参数的格式是否符合要求。一般来说,请求参数需要进行URL编码传输。URL编码的规则是将参数中的特殊字符进…

    Java 2023年5月19日
    00
  • JavaEE Spring MyBatis如何一步一步实现数据库查询功能

    一、概述JavaEE 是一个企业级应用开发框架,Spring 是 JavaEE 中最常用的框架之一,MyBatis 是一款优秀的 ORM 框架,通过使用这三个框架,可以轻松实现一个 JavaEE 企业级应用。本文将以一个简单的文章阅读网站为例,介绍 JavaEE Spring MyBatis 如何一步一步实现数据库查询功能。 二、环境准备1. JDK 1.8…

    Java 2023年5月31日
    00
  • springMVC如何将controller中Model数据传递到jsp页面

    以下是SpringMVC将Controller中Model数据传递到JSP页面的完整攻略: 1. 在Controller中添加数据到Model 在SpringMVC中,我们可以使用Model或者ModelMap来添加数据到Model中,从而传递给JSP页面。在Controller中使用如下代码添加数据: @GetMapping("/example&…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部