0
点赞
收藏
分享

微信扫一扫

Java 11 新特性之 集合增强

Java 11 对集合框架进行了增强,主要体现在引入了一些新的静态工厂方法,用于快速创建不可变集合。这些新方法使得集合的创建更加简洁和直观,尤其适合处理小型集合或需要不可变集合的场景。

以下是 Java 11 中集合增强的主要内容:

1. List.of()

用于创建一个不可变的 List

示例:

List<String> list = List.of("A", "B", "C");

System.out.println(list); // 输出:[A, B, C]

特点:

  • 创建的列表是不可变的,任何修改操作(如 add()remove())都会抛出 UnsupportedOperationException
  • 不允许包含 null 元素,否则会抛出 NullPointerException
  • 性能更高,适用于只读的小型集合。

2. Set.of()

用于创建一个不可变的 Set

示例:

Set<String> set = Set.of("A", "B", "C");

System.out.println(set); // 输出:[A, B, C]

特点:

  • 创建的集合是不可变的,任何修改操作(如 add()remove())都会抛出 UnsupportedOperationException
  • 不允许包含重复元素,否则会抛出 IllegalArgumentException
  • 不允许包含 null 元素,否则会抛出 NullPointerException

3. Map.of() 和 Map.ofEntries()

用于创建不可变的 Map

示例 1:使用 Map.of()

Map<String, Integer> map = Map.of("Alice", 25, "Bob", 30);

System.out.println(map); // 输出:{Alice=25, Bob=30}

限制:

  • Map.of() 最多支持 10 个键值对。如果需要更多键值对,可以使用 Map.ofEntries()

示例 2:使用 Map.ofEntries()

Map<String, Integer> map = Map.ofEntries(
    Map.entry("Alice", 25),
    Map.entry("Bob", 30),
    Map.entry("Charlie", 35)
);

System.out.println(map); // 输出:{Alice=25, Bob=30, Charlie=35}

特点:

  • 创建的映射是不可变的,任何修改操作(如 put()remove())都会抛出 UnsupportedOperationException
  • 键和值都不允许为 null,否则会抛出 NullPointerException
  • 不允许有重复的键,否则会抛出 IllegalArgumentException

4. 不可变集合的优势

  1. 线程安全
  • 不可变集合在多线程环境中是线程安全的,因为它们的内容无法被修改。
  1. 性能优化
  • 不可变集合通常比可变集合更高效,因为它们避免了动态扩容和其他同步开销。
  1. 防止意外修改
  • 不可变集合可以防止代码中意外地修改集合内容,从而提高代码的健壮性。

5. 注意事项

  1. 不可变性
  • 这些方法创建的集合是不可变的,不能添加、删除或修改元素。

List<String> list = List.of("A", "B");
list.add("C"); // 抛出 UnsupportedOperationException

  1. 不允许 null
  • List.of()Set.of() 和 Map.of() 都不允许包含 null 元素。

List<String> list = List.of("A", null); // 抛出 NullPointerException

  1. 小集合适用
  • 这些方法适合创建小型集合。对于大型集合,仍然需要使用传统的构造方法(如 ArrayListHashSetHashMap 等)。

实际应用场景

以下是一些实际使用场景,展示了这些增强方法的便利性:

场景 1:快速创建常量集合

// 常量列表
List<String> DAYS_OF_WEEK = List.of("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");

// 常量映射
Map<String, String> HTTP_STATUS_CODES = Map.of(
    "200", "OK",
    "404", "Not Found",
    "500", "Internal Server Error"
);

场景 2:测试数据

在单元测试中,可以快速创建测试用的集合:

@Test
void testCollectionOperations() {
    List<Integer> numbers = List.of(1, 2, 3, 4, 5);
    assertEquals(5, numbers.size());
}

场景 3:配置项

在应用程序中,可以使用不可变集合存储配置信息:

Set<String> ALLOWED_FILE_TYPES = Set.of("txt", "pdf", "docx");

总结

Java 11 的集合增强功能通过引入 List.of()Set.of()Map.of() 等静态工厂方法,极大地简化了不可变集合的创建过程。这些方法不仅使代码更加简洁,还提高了集合操作的安全性和性能。

举报

相关推荐

0 条评论