List.of()
、Set.of()
与Map.of()
?在Java开发中,不可变集合提供了一种安全、简洁的方式来创建只读集合,防止集合内容被修改。JDK 9引入了List.of()
、Set.of()
和 Map.of()
方法,让不可变集合的创建变得更加简单直观。在本篇文章中,猫头虎将详细解析:
List.of()
、Set.of()
和Map.of()
?掌握不可变集合,让你的代码更加安全高效!🚀
粉丝提问: 猫哥,集合里的元素总是被不小心修改,能否创建一种只读的集合?听说JDK 9有
List.of()
之类的方法,它们怎么用?猫头虎解析:不可变集合可以创建只读集合,从而提高代码的安全性和性能。JDK 9引入的
List.of()
、Set.of()
和Map.of()
方法让这种集合的创建变得更简单!
不可变集合(Immutable Collections)是指内容不可被修改的集合。一旦创建,就无法添加、删除或更改元素。
List.of()
创建不可变ListList.of()
方法可以快速创建一个不可变的List
。
示例代码 🚀
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
}
}
输出结果:
不可变List: [猫头虎, Java, 不可变集合]
注意事项:
List.of()
方法创建的集合是不可修改的。UnsupportedOperationException
。Set.of()
创建不可变SetSet.of()
方法用于创建一个不可重复且不可变的Set
。
示例代码 🚀
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
}
}
输出结果:
不可变Set: [猫头虎, Java, 不可变集合]
注意事项:
Set.of()
不允许有重复元素,否则会抛出IllegalArgumentException
。Map.of()
创建不可变MapMap.of()
方法用于创建一个不可变的键值对集合。
示例代码 🚀
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
}
}
输出结果:
不可变Map: {key1=猫头虎, key2=Java, key3=不可变集合}
注意事项:
Map.of()
最多支持10个键值对,超过10个需要使用Map.ofEntries()
方法。IllegalArgumentException
。Map.ofEntries()
创建大规模不可变Map示例代码 🚀
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);
}
}
UnsupportedOperationException
。Set.of()
和 Map.of()
不允许重复元素或键。Q:List.of()
和Collections.unmodifiableList()
有什么区别?
A:
List.of()
直接创建不可变集合,集合本身不可修改。Collections.unmodifiableList()
是对已有集合的包装,底层集合修改时,包装也会受到影响。Q:Map.of()
支持多少个键值对?
A:Map.of()
最多支持10个键值对,超过10个需使用Map.ofEntries()
。
方法 | 适用集合 | 特点 |
---|---|---|
List.of() | List | 快速创建不可变List,元素可重复。 |
Set.of() | Set | 快速创建不可变Set,元素不可重复。 |
Map.of() | Map | 快速创建不可变Map,键不可重复。 |
Map.ofEntries() | Map(大规模数据) | 支持超过10个键值对的不可变Map。 |
不可变集合是JDK 9+的重要特性,提供了线程安全、简洁高效的数据管理方式,广泛适用于多线程环境和只读场景。
flowchart TD
A[数据源] --> B[List.of()] --> C[不可变List]
A --> D[Set.of()] --> E[不可变Set]
A --> F[Map.of()] --> G[不可变Map]
掌握不可变集合,让你的代码更安全、更高效!