【从零开始学习JAVA | 第二十八篇】不可变集合

【从零开始学习JAVA | 第二十八篇】不可变集合_第1张图片

目录

目录

前言:

不可变集合:

常见的不可变集合:

1.创建list的不可变集合:

2.创建map的不可变集合:

应用场景:

总结:


前言:

        本文我们将为大家介绍JAVA中的不可变集合,它将内容锁死,不能随意改变内容,是JAVA中很常见的一个内容板块,大家要对此有较好的掌握程度。

不可变集合:

        在Java中,不可变集合是指一旦创建后就不能被修改的集合。这意味着不可变集合中的元素是固定的,无法添加、删除或修改。不可变集合的主要优势是线程安全和更高的性能

线程安全:

        线程安全是指在多线程环境下进行操作时,该操作能够正确地执行并且不会导致不一致或不确定的结果。简单来说,当多个线程同时访问或修改共享的数据时,线程安全保证了数据的正确性和一致性。

        线程安全是通过使用同步、锁、原子操作或线程安全的数据结构来保证多个线程之间共享数据的正确性和一致性。在多线程环境下,合理地处理线程安全问题可以避免出现竞态条件、数据竞争和死锁等问题。

常见的不可变集合:

【从零开始学习JAVA | 第二十八篇】不可变集合_第2张图片

1.创建list的不可变集合:

在Java中,有几种方法可以创建不可变的List集合:

1. 使用  Collections.unmodifiableList()  方法:

List list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");

List immutableList = Collections.unmodifiableList(list);

此方法将一个普通的可变List转换为不可变的List。尽管可以通过原始列表修改底层数据,但不可变列表上的修改操作将会抛出`UnsupportedOperationException`异常。

2. 使用  Guava的  ImmutableList.of()  方法:

ImmutableList immutableList = ImmutableList.of("apple", "banana", "orange");

Guava库提供的`ImmutableList`类提供了一种简单而方便的方式来创建不可变列表。该方法接受任意数量的元素作为参数,并返回一个不可变的List集合。

3. 使用Java 9中新增的 List.of() 方法:

List immutableList = List.of("apple", "banana", "orange");

在Java 9中,新增了`List.of()`方法,允许直接创建不可变的List集合。类似于Guava的`ImmutableList.of()`方法,它接受任意数量的元素作为参数,并返回一个不可变的List。

这些方法都可以创建不可变的List集合,保证集合的内容在创建后不能再被修改。需要注意的是,如果尝试在不可变列表上进行修改操作,将会抛出异常。因此,在选择使用哪种方法时,应根据情况和个人偏好进行选择。

2.创建map的不可变集合:

在Java中,有几种方法可以创建不可变的Map集合:

1. 使用  Collections.unmodifiableMap()  方法:

Map map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);

Map immutableMap = Collections.unmodifiableMap(map);


此方法将一个普通的可变Map转换为不可变的Map。尽管可以通过原始映射修改底层数据,但不可变映射上的修改操作将会抛出`UnsupportedOperationException`异常。

2. 使用  Guava的ImmutableMap.of()  方法:

ImmutableMap immutableMap = ImmutableMap.of("apple", 1, "banana", 2, "orange", 3);

Guava库提供的`ImmutableMap`类提供了一种简单而方便的方式来创建不可变的Map。该方法接受键值对作为参数,并返回一个不可变的Map集合。

3. 使用Java 9中新增的  Map.of()  方法:

Map immutableMap = Map.of("apple", 1, "banana", 2, "orange", 3);

在Java 9中,新增了`Map.of()`方法,允许直接创建不可变的Map集合。类似于Guava的`ImmutableMap.of()`方法,它接受键值对作为参数,并返回一个不可变的Map。

这些方法都可以创建不可变的Map集合,保证集合的内容在创建后不能再被修改。需要注意的是,如果尝试在不可变映射上进行修改操作,将会抛出异常。因此,在选择使用哪种方法时,应根据情况和个人偏好进行选择。

应用场景:

不可变集合在许多场景中都有广泛的应用,以下是一些常见的应用场景:

1. 多线程环境:在多线程环境中,不可变集合是线程安全的。多个线程可以同时访问和读取不可变集合,而无需额外的同步机制。这样可以提高并发性能,并减少线程竞争和数据不一致性的问题。

2. 缓存:不可变集合在缓存中的应用非常常见。例如,使用不可变集合来存储缓存的数据,可以避免在缓存中发生数据修改和同步的问题。这样可以提高缓存的性能和可靠性。

3. 方法返回值:不可变集合可以作为方法的返回值,确保方法调用者无法修改返回的集合。这种方式可以提供安全性和稳定性,避免在方法调用过程中数据被意外修改。

4. 配置信息:不可变集合常用于存储配置信息。一次性加载配置信息到不可变集合中,可以确保配置信息不会被意外修改,并提供一致性和可靠性。

5. 哈希表的键:不可变集合可以作为哈希表的键,保证键的唯一性和哈希值的稳定性。由于不可变集合的元素不可变,所以可以确保哈希表中的键保持不变。

6. 函数式编程:在函数式编程中,不可变集合是很重要的概念。函数式编程鼓励使用不可变数据结构和纯函数,不可变集合可以确保没有副作用,并支持函数的组合和并发执行。

需要注意的是,虽然不可变集合在上述场景中是很有用的,但并不是适用于所有情况。在某些需要频繁修改和更新集合的场景中,可变集合可能更合适。因此,需要根据具体的应用需求和性能要求来选择使用可变集合还是不可变集合。

总结:

        不可变集合是指在创建后不可修改的集合,具有以下特点和优势:1. 数据的稳定性和一致性,避免了意外的修改。2. 线程安全,无需额外的同步操作。3. 高效的查询和检索,可以通过优化哈希和相等性操作提高性能。4. 可以安全用作键,提供更好的一致性和稳定性。5. 简化编码和维护,减少了防御性复制和同步操作的需要。不可变集合是一种可靠、高效且易于使用的数据结构,适用于需要保持数据不变性和线程安全性的场景。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

你可能感兴趣的:(【从零开始学习JAVA】,学习,java)