immutablemap.of详解

一、ImmutableMap.of是什么?

ImmutableMap.of是Google guava中的一个静态工厂方法,它的作用是创建一个不可变的map。它可以接受0~5对键值对参数,并返回一个不可变的map。当然,如果需要添加更多的键值对,我们可以使用另一个静态工厂方法ImmutableMap.builder()

    ImmutableMap immutableMap = ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3");
    System.out.println(immutableMap);

二、ImmutableMap.of的优势

在操作集合的时候,我们通常会遇到线程安全、可变性等问题。使用ImmutableMap.of可以帮助我们解决这些问题,它的优势主要表现在以下几点:

1、线程安全

由于ImmutableMap.of创建的是一个不可变map,所以多线程操作时不需要考虑线程安全问题。这样可以大大减轻我们开发时的负担,让我们更专注于业务逻辑实现。

    ImmutableMap immutableMap = ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3");

    new Thread(() -> {
        immutableMap.forEach((key, value) -> {
            System.out.println(key + ":" + value);
        });
    }).start();

    new Thread(() -> {
        immutableMap.forEach((key, value) -> {
            System.out.println(key + ":" + value);
        });
    }).start();

2、不可变性

ImmutableMap.of创建出来的map是不可变的。这意味着我们不能添加、修改、删除其中的键值对。但是,如果我们真的需要修改map中的键值对,我们可以通过builder()方法创建可变的map,并通过put()方法来添加、修改键值对。这样既保证了map的不可变性,又可以满足我们的需求。

    ImmutableMap.Builder builder = ImmutableMap.builder();
    builder.put("key1", "value1");
    builder.put("key2", "value2");
    ImmutableMap immutableMap = builder.build();
    System.out.println(immutableMap);

3、性能优越

如果我们需要创建一个map,通常的做法是使用HashMap等可变类型的map,然后再使其不可变。这个过程需要进行拷贝、重构等操作,会占用一定的时间和内存空间。但是,ImmutableMap.of在创建map时就已经是不可变的,不需要进行额外的拷贝操作,因此具有较高的性能。

三、ImmutableMap.of的使用场景

ImmutableMap.of可以在很多场景中使用,尤其在需要使用不可变map的场合下,它的优势依然非常明显。以下是几个经典的使用场景:

1、作为方法的返回值

当我们需要返回一个map类型的数据时,如果使用可变的map,需要先将其转化为不可变的map,否则可能会引发线程安全问题等。使用ImmutableMap.of创建的map是不可变的,可以直接返回,避免了这样的问题。

    public static ImmutableMap getImmutableMap() {
        return ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3");
    }

2、防止参数被修改

在某些情况下,当我们需要将一个map传入一个方法中时,如果使用可变的map,方法中可能会对其进行修改,这是我们不希望看到的。使用ImmutableMap.of可以创建一个不可变的map,它不会被修改,保证了被传入的参数的不可变性。

    public static void printImmutableMap(ImmutableMap immutableMap) {
        immutableMap.forEach((key, value) -> System.out.println(key + ":" + value));
    }
    
    public static void main(String[] args) {
        ImmutableMap immutableMap = ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3");
        printImmutableMap(immutableMap);
    }

3、缓存数据

在一些场合下,我们需要缓存一些数据,比如经常访问的一些配置信息。使用ImmutableMap.of创建的map是不可变的,可以避免线程安全等问题,非常适合缓存数据。

    private static final ImmutableMap configMap = ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3");

    public static void main(String[] args) {
        String value = configMap.get("key1");
        System.out.println(value);
    }

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159415.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-19 18:59
下一篇 2024-11-19 18:59

相关推荐

  • eslint no-loss-of-precision requires at least eslint v7.1.0

    这篇文章将从以下几个方面详细阐述eslint no-loss-of-precision requires至少需要eslint v7.1.0版本的问题: 一、概述 如果使用较老的es…

    编程 2025-04-29
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25

发表回复

登录后才能评论