Java 不可变集合全面解析

在 Java 编程中,不可变集合是一种特殊类型的集合,一旦创建,其内容就不能被修改。这种特性使得不可变集合在某些场景下具有独特的优势。

创建不可变集合的应用场景

  1. 数据不可修改的场景:当某个数据不应该被修改时,将其防御性地拷贝到不可变集合中是一种很好的实践。例如,一些配置信息、常量数据等,将它们放在不可变集合中,可以确保在程序运行过程中其内容不会被意外修改。
  1. 安全调用不可信库:当集合对象需要被不可信的库调用时,使用不可变集合形式是安全的。因为不可变集合无法被外部修改,从而避免了被不可信代码篡改数据的风险。

简单理解

不可变集合的核心就是不想让别人修改集合中的内容,从而保证数据的安全性和稳定性。

创建不可变集合的书写格式

在 Java 的List、Set、Map接口中,都提供了静态的of方法,用于获取一个不可变的集合。具体方法如下:

方法名称

说明

static List of(E...elements)

创建一个具有指定元素的 List 集合对象

static Set of(E...elements)

创建一个具有指定元素的 Set 集合对象

static Map of(K k1, V v1, K k2, V v2,...)

创建一个具有指定键值对元素的 Map 集合对象

注意事项

  1. 不可变操作限制:通过of方法创建的不可变集合,不能进行添加、删除和修改操作。一旦尝试进行这些操作,将会抛出UnsupportedOperationException异常。
  1. Set 集合的唯一性:当使用of方法创建不可变的Set集合时,传入的参数必须保证唯一性。如果传入重复元素,在 Java 10 及以上版本会抛出IllegalArgumentException异常。
  1. Map 集合的键唯一性:在创建不可变的Map集合时,键必须是唯一的。如果传入重复的键,同样会抛出IllegalArgumentException异常。
  1. Map 集合的参数上限:Map接口的of方法,参数是有上限的,最多只能传递 20 个参数,即 10 个键值对。如果需要传递超过 10 个键值对对象,可以使用ofEntries方法。

创建 Map 的不可变集合

细节

  1. 键的唯一性:同上述注意事项,Map 集合中键不能重复。
  1. of 方法参数上限:最多传递 20 个参数,10 个键值对。
  1. ofEntries 方法:当键值对数量超过 10 个时,在Map接口中可以使用ofEntries方法。该方法接受一个Map.Entry数组作为参数。

示例代码

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

public class ImmutableMapExample {
    public static void main(String[] args) {
        /* 创建Map的不可变集合,键值对的数量超过10个*/
        //创建一个普通的Map集合
        HashMap hm = new HashMap<>();
        hm.put("张三", "南京");
        hm.put("李四", "北京");
        hm.put("王五", "上海");
        hm.put("赵六", "北京");
        hm.put("孙七", "深圳");
        hm.put("M八", "杭州");
        hm.put("吴九", "字波");
        hm.put("翔古", "苏州");
        hm.put("刘…", "无锵");
        hm.put("陈二", "嘉兴");
        hm.put("aaa", "111");

        //利用上边的数据来获取一个不可变的集合
        // 方式一:使用ofEntries方法
        Map map1 = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));
        // 方式二:使用copyOf方法,更为简洁
        Map map2 = Map.copyOf(hm);

        System.out.println("使用ofEntries创建的不可变Map: " + map1);
        System.out.println("使用copyOf创建的不可变Map: " + map2);
    }
}

在上述代码中,展示了两种创建键值对数量超过 10 个的不可变Map集合的方法,一种是使用ofEntries方法,另一种是使用Map.copyOf方法,copyOf方法更为简洁直观。

希望通过这篇笔记,能帮助大家更好地理解和使用 Java 中的不可变集合,在实际编程中根据具体场景选择合适的集合类型。如果在使用过程中有任何疑问,欢迎在评论区留言交流。

内容有进一步修改意见,比如增减示例、调整结构,欢迎随时告诉我。

你可能感兴趣的:(开发语言,java)