前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >不可变集合:什么是不可变集合?如何在JDK 9+中使用List.of()、Set.of()与Map.of()?

不可变集合:什么是不可变集合?如何在JDK 9+中使用List.of()、Set.of()与Map.of()?

作者头像
猫头虎
发布2024-12-18 18:59:22
发布2024-12-18 18:59:22
11400
代码可运行
举报
运行总次数:0
代码可运行

不可变集合:什么是不可变集合?如何在JDK 9+中使用List.of()Set.of()Map.of()

引言

在Java开发中,不可变集合提供了一种安全、简洁的方式来创建只读集合,防止集合内容被修改。JDK 9引入了List.of()Set.of()Map.of()方法,让不可变集合的创建变得更加简单直观。在本篇文章中,猫头虎将详细解析:

  • 什么是不可变集合?它有哪些优势?
  • 如何使用List.of()Set.of()Map.of()
  • 注意事项与示例代码,让你快速上手JDK 9不可变集合!

掌握不可变集合,让你的代码更加安全高效!🚀

Java进阶之路:必知必会的核心知识点与JDK8、JDK17、JDK21版本对比
Java进阶之路:必知必会的核心知识点与JDK8、JDK17、JDK21版本对比

正文

问题背景:痛点描述

粉丝提问: 猫哥,集合里的元素总是被不小心修改,能否创建一种只读的集合?听说JDK 9有List.of()之类的方法,它们怎么用?

猫头虎解析:不可变集合可以创建只读集合,从而提高代码的安全性和性能。JDK 9引入的List.of()Set.of()Map.of()方法让这种集合的创建变得更简单!

核心概念:什么是不可变集合?

1. 定义

不可变集合(Immutable Collections)是指内容不可被修改的集合。一旦创建,就无法添加、删除或更改元素。

2. 不可变集合的优势
  • 安全性:防止数据被意外修改。
  • 线程安全:在并发场景下无需加锁,天然线程安全。
  • 性能:创建后的集合不会被修改,适合频繁读取的场景。

JDK 9+ 不可变集合的创建方法

1. 使用List.of()创建不可变List

List.of()方法可以快速创建一个不可变的List

示例代码 🚀

代码语言:javascript
代码运行次数:0
复制
import java.util.List;

public class ImmutableListExample {
    public static void main(String[] args) {
        List<String> list = List.of("猫头虎", "Java", "不可变集合");

        System.out.println("不可变List: " + list);

        // 尝试修改元素会抛出异常
        // list.add("新元素"); // 抛出UnsupportedOperationException
    }
}

输出结果

代码语言:javascript
代码运行次数:0
复制
不可变List: [猫头虎, Java, 不可变集合]

注意事项

  • List.of()方法创建的集合是不可修改的。
  • 如果尝试修改元素,会抛出UnsupportedOperationException

2. 使用Set.of()创建不可变Set

Set.of()方法用于创建一个不可重复不可变Set

示例代码 🚀

代码语言:javascript
代码运行次数:0
复制
import java.util.Set;

public class ImmutableSetExample {
    public static void main(String[] args) {
        Set<String> set = Set.of("猫头虎", "Java", "不可变集合");

        System.out.println("不可变Set: " + set);

        // 尝试添加元素会抛出异常
        // set.add("新元素"); // 抛出UnsupportedOperationException
    }
}

输出结果

代码语言:javascript
代码运行次数:0
复制
不可变Set: [猫头虎, Java, 不可变集合]

注意事项

  • Set.of()不允许有重复元素,否则会抛出IllegalArgumentException
  • 集合是无序的,遍历结果可能与插入顺序不同。

3. 使用Map.of()创建不可变Map

Map.of()方法用于创建一个不可变的键值对集合

示例代码 🚀

代码语言:javascript
代码运行次数:0
复制
import java.util.Map;

public class ImmutableMapExample {
    public static void main(String[] args) {
        Map<String, String> map = Map.of(
            "key1", "猫头虎",
            "key2", "Java",
            "key3", "不可变集合"
        );

        System.out.println("不可变Map: " + map);

        // 尝试修改元素会抛出异常
        // map.put("key4", "新值"); // 抛出UnsupportedOperationException
    }
}

输出结果

代码语言:javascript
代码运行次数:0
复制
不可变Map: {key1=猫头虎, key2=Java, key3=不可变集合}

注意事项

  • Map.of()最多支持10个键值对,超过10个需要使用Map.ofEntries()方法。
  • 如果键重复,会抛出IllegalArgumentException

扩展:使用Map.ofEntries()创建大规模不可变Map

示例代码 🚀

代码语言:javascript
代码运行次数:0
复制
import java.util.Map;
import java.util.Map.Entry;

public class ImmutableMapEntriesExample {
    public static void main(String[] args) {
        Map<String, String> map = Map.ofEntries(
            Map.entry("key1", "猫头虎"),
            Map.entry("key2", "Java"),
            Map.entry("key3", "不可变集合"),
            Map.entry("key4", "Map.ofEntries")
        );

        System.out.println("不可变Map: " + map);
    }
}

注意事项总结

  1. 不可变集合不能修改元素:添加、删除或更新操作都会抛出UnsupportedOperationException
  2. 重复元素Set.of()Map.of()不允许重复元素或键。
  3. 线程安全:不可变集合天然线程安全,适合多线程读取场景。
  4. 性能:不可变集合减少了额外的锁开销,适合频繁读取的场景。

Q&A互动答疑

Q:List.of()Collections.unmodifiableList()有什么区别? A

  • List.of()直接创建不可变集合,集合本身不可修改。
  • Collections.unmodifiableList()是对已有集合的包装,底层集合修改时,包装也会受到影响。

Q:Map.of()支持多少个键值对? AMap.of()最多支持10个键值对,超过10个需使用Map.ofEntries()


总结:JDK 9+ 不可变集合的优势与用法

方法

适用集合

特点

List.of()

List

快速创建不可变List,元素可重复。

Set.of()

Set

快速创建不可变Set,元素不可重复。

Map.of()

Map

快速创建不可变Map,键不可重复。

Map.ofEntries()

Map(大规模数据)

支持超过10个键值对的不可变Map。


未来趋势与总结

不可变集合是JDK 9+的重要特性,提供了线程安全简洁高效的数据管理方式,广泛适用于多线程环境和只读场景。

代码语言:javascript
代码运行次数:0
复制
flowchart TD
A[数据源] --> B[List.of()] --> C[不可变List]
A --> D[Set.of()] --> E[不可变Set]
A --> F[Map.of()] --> G[不可变Map]

掌握不可变集合,让你的代码更安全、更高效!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 不可变集合:什么是不可变集合?如何在JDK 9+中使用List.of()、Set.of()与Map.of()?
    • 引言
  • 正文
    • 问题背景:痛点描述
    • 核心概念:什么是不可变集合?
      • 1. 定义
      • 2. 不可变集合的优势
    • JDK 9+ 不可变集合的创建方法
      • 1. 使用List.of()创建不可变List
      • 2. 使用Set.of()创建不可变Set
      • 3. 使用Map.of()创建不可变Map
    • 扩展:使用Map.ofEntries()创建大规模不可变Map
    • 注意事项总结
    • Q&A互动答疑
    • 总结:JDK 9+ 不可变集合的优势与用法
    • 未来趋势与总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档