Java中Map集合初始化并赋值

Java中Map集合初始化并赋值的几种方式:

package com.itstone.mok.hutool;

import com.google.common.collect.ImmutableMap;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
public class InitializeMapCollTest {

    private static final Map<String, String> map1 = new HashMap<>();

    static {
        map1.put("张三", "18");
        map1.put("李四", "13");
    }

    /**
     * 方式一: static块
     */
    @Test
    public void test01() {
        // {李四=13, 张三=18}
        System.out.println(map1);
    }

    Map<String, String> map2 = new HashMap<String, String>() {{
        put("张三", "20");
        put("李四", "22");
    }};

    /**
     * 方式二: java8新特性, 双括号初始化;
     * PS: 这种使用双括号进行初始化的语法在执行效率上要比普通的初始化写法要稍低。
     * 第一层括弧实际是定义了一个匿名内部类 ,第二层括弧实际上是一个实例初始化块,这个块在内部匿名类构造时被执行;
     */
    @Test
    public void test02() {
        // {李四=22, 张三=20}
        System.out.println(map2);
    }

    /**
     * 方式三: Guava(要提前引入Guava依赖)
     *    <dependency>
     *         <groupId>com.google.guava</groupId>
     *         <artifactId>guava</artifactId>
     *         <version>28.1-jre</version>
     *    </dependency>
     * <p>
     * PS: ImmutableMap是不可变 Map, 初始化之后不能再调用put方法, 否则报java.lang.UnsupportedOperationException异常;
     * 在实际开发中, 我们用到 ImmutableMap 的场景都是定义系统所需的一些常量。
     */
    @Test
    public void test03() {
        Map<String, String> map3 = ImmutableMap.of("张三", "34", "李四", "24");
        // 或者
        Map<String, String> map4 = ImmutableMap.<String, String>builder()
                .put("张三", "34")
                .put("李四", "24")
                .build();
        // {张三=34, 李四=24}
        System.out.println(map3);
        // {张三=34, 李四=24}
        System.out.println(map4);
    }

    /**
     * 方式四: 对于Java 9或更高版本:
     * Map.of() 和 Map.ofEntries()静态工厂方法提供了一种创建不可变映射的便捷方法。
     */
    @Test
    public void test04() {
        // 1. 最多存储10个元素
        Map<String, String> map5 = Map.of("张三", "21", "李四", "26");
        // {张三=21, 李四=26}
        System.out.println(map5);
        // 2. 没有限制
        Map<String, String> map6 = Map.ofEntries(
                entry("张三", "21"),
                entry("李四", "26")
        );
        // {张三=21, 李四=26}
        System.out.println(map6);
    }

}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值