当前位置: 首页 > wzjs >正文

东莞正规的人才市场seo优化工具软件

东莞正规的人才市场,seo优化工具软件,简述网站开发的5个步骤,做一个天猫店铺要多少钱Java 9集合工厂方法:用List.of、Set.of、Map.of创建安全不可变集合 Java 9引入了革命性的集合工厂方法List.of、Set.of和Map.of,彻底改变了开发者创建小型不可变集合的方式。这些方法不仅语法简洁,还在安全性和性能上实现了质的飞跃。本文将…

Java 9集合工厂方法:用List.ofSet.ofMap.of创建安全不可变集合

Java 9引入了革命性的集合工厂方法List.ofSet.ofMap.of,彻底改变了开发者创建小型不可变集合的方式。这些方法不仅语法简洁,还在安全性和性能上实现了质的飞跃。本文将深入解析这些工厂方法的核心特性,并通过对比传统方式,展示其在实际开发中的优势。


一、新工厂方法概览

1. 方法家族

方法签名说明示例
List.of(E... elements)创建不可变ListList<String> list = List.of("A", "B");
Set.of(E... elements)创建不可变Set(元素唯一)Set<Integer> set = Set.of(1, 2, 3);
Map.of(K k1, V v1, ...)创建不可变Map(最多10个键值对)Map<String, Integer> map = Map.of("a", 1, "b", 2);
Map.ofEntries(Map.Entry...)创建任意数量键值对的MapMap.ofEntries(entry("a", 1), entry("b", 2))

二、核心优势

1. 真正不可变性(vs 伪不可变)

传统方式的问题

// Java 8的"不可变"集合
List<String> oldList = Collections.unmodifiableList(new ArrayList<>(Arrays.asList("A", "B"))
);
oldList.add("C"); // 运行时抛出UnsupportedOperationException

新方式

List<String> newList = List.of("A", "B");
newList.add("C"); // 编译期即可通过IDE提示发现问题
特性新工厂方法Collections.unmodifiableList
编译期类型检查✅ 直接拒绝修改操作❌ 运行时异常
防御原集合修改✅ 完全独立❌ 包装集合仍受原集合影响

2. 空值安全(Null Safety)

List.of("A", null); // 立即抛出NullPointerException
Set.of(null);       // 同上
Map.of("key", null);// 值也不能为null

设计哲学:在集合创建时严格拒绝null,避免后续NPE隐患。

3. 元素唯一性保证(针对Set/Map)

Set.of(1, 1); // 直接抛出IllegalArgumentException
Map.of("a", 1, "a", 2); // 键重复,抛出异常

4. 性能优化

JVM针对工厂方法返回的集合做了深度优化:

  • 内存占用:比new ArrayList节省约30%内存
  • 迭代速度:比传统集合快2-3倍(得益于紧凑存储)
  • 哈希计算Set.of/Map.of在创建时预计算哈希值

三、与传统方式对比

1. 创建不可变List

Java 8方式

List<String> list = Collections.unmodifiableList(new ArrayList<>(Arrays.asList("A", "B"))
);
// 需要两层包装,内存开销大

Java 9方式

List<String> list = List.of("A", "B");
// 直接返回优化后的不可变实例

2. 创建不可变Set

传统方式

Set<Integer> set = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(1, 2, 3))
);
// 无法保证初始化时的元素唯一性

新方式

Set<Integer> set = Set.of(1, 2, 3);
// 自动检查元素唯一性,发现重复立即报错

3. 创建不可变Map

传统方式

Map<String, Integer> tempMap = new HashMap<>();
tempMap.put("a", 1);
tempMap.put("b", 2);
Map<String, Integer> map = Collections.unmodifiableMap(tempMap);
// 需要中间变量,存在竞态条件风险

新方式

Map<String, Integer> map = Map.of("a", 1, "b", 2);
// 线程安全,无中间状态

四、使用注意事项

1. 元素限制

  • 数量限制Map.of最多接受10个键值对(超过需用Map.ofEntries
  • 类型限制:不支持基本类型(需用包装类)
    List.of(1, 2, 3);      // 正确:自动装箱
    List.of(new int[]{1}); // 错误:实际类型为List<int[]>
    

2. 防御性编程

// 接收外部集合时创建防御副本
void process(List<String> input) {List<String> safeList = List.copyOf(input); // Java 10+// 或 List<String> safeList = List.of(input.toArray());
}

3. 与Stream API结合

// 过滤后生成不可变集合
List<String> filtered = Stream.of("A", "B", "C").filter(s -> s.length() > 1).collect(Collectors.toUnmodifiableList());

五、最佳实践场景

1. 配置参数存储

private static final Set<String> VALID_STATUSES = Set.of("NEW", "PROCESSING", "COMPLETED");

2. 测试数据构造

@Test
void testSort() {List<Integer> numbers = List.of(3, 1, 4);Collections.sort(numbers); // 立即抛出UnsupportedOperationException
}

3. 返回值保护

public List<Employee> getEmployees() {return List.copyOf(internalList); // 返回不可变副本
}

六、常见问题解答

Q1:为什么需要新的工厂方法?

  • 类型安全:编译时即可发现修改操作
  • 性能优势:专用实现比通用集合更高效
  • 语义清晰:明确表达不可变意图

Q2:如何创建空集合?

List<String> emptyList = List.of(); // 空集合单例
Set<Integer> emptySet = Set.of();
Map<String, String> emptyMap = Map.of();

Q3:与Arrays.asList的区别?

特性List.ofArrays.asList
可变性完全不可变半可变(可set不可add)
空值支持❌ 禁止null✅ 允许null
与原数组关联❌ 独立存储✅ 共享底层数组
内存占用优化后的紧凑结构包装器+数组引用

七、总结

使用新工厂方法的三大理由

  1. 🛡️ 安全性:杜绝意外修改,强化空值约束
  2. 🚀 性能:专为不可变场景优化,内存效率更高
  3. 简洁性:一行代码表达创建不可变集合的意图

适用原则

  • 优先用于静态配置数据
  • 推荐作为方法返回值防止外部修改
  • 适合存储需要确保完整性的业务数据

迁移建议

  • 逐步替换项目中Collections.unmodifiableXXX的用法
  • 在单元测试中优先采用新语法
  • 注意检查历史代码中的null值使用

Java 9的集合工厂方法不仅是语法糖,更是工程实践的重要进步。合理运用这些特性,可以让代码更健壮、更高效,同时降低维护成本。

http://www.dtcms.com/wzjs/367492.html

相关文章:

  • 广州电子商城网站建设网上营销
  • 做电子商务平台网站公司网站建设多少钱
  • 怎么做网站结构图浏览器大全网站
  • 英文手机商城网站建设百度广告费一般多少钱
  • 如何让人帮忙做网站快速排名优化推广排名
  • 宁德市蕉城区建设局网站化妆品推广软文
  • 人和机械网站建设苏州网站建设方案
  • 青海省住房城乡建设厅网站首页推广平台有哪些
  • 邻水县规划和建设局 网站购买域名的网站
  • 日本做网站网站seo报价
  • 大连金州新区规划建设局网站广州最新政策
  • 一般做外贸上什么网站百度搜索关键词排名优化推广
  • 网站建设支出账务处理seo简介
  • 电商网站设计多少钱西安seo报价
  • 最好最值得做的调查网站长沙整站优化
  • 天津建设银行公积金缴费官方网站广告推广图片
  • 湛江网站制作起名最好的网站排名
  • 镇海住房和建设交通局网站app拉新推广平台渠道商
  • 开发设计公司网站上海seo公司哪个靠谱
  • 菏泽网站建设电话html网页制作软件
  • 如何做简洁网站产品销售方案与营销策略
  • 网站提供哪些服务上海关键词自动排名
  • 东莞网站优化是什么新闻软文怎么写
  • 东营wordpress网站建设惠州seo快速排名
  • 番禺做网站平台什么软件可以排名次
  • 开发一个区块链app多少钱seo线下培训机构
  • android什么意思seo排名优化技巧
  • 一个网站有多个域名五年级下册数学优化设计答案
  • 巴中免费网站建设广州百度seo
  • 政府门户网站群集约化建设方案seo三人行论坛