
Collections.emptyList()
Collections.emptyMap()
null
在Java中使用
Collections.emptyList()
Collections.emptyMap()
java.util.Collections
当你需要一个空列表,并且不希望它被修改时,可以直接调用:
List<String> emptyStringList = Collections.emptyList();
// 尝试修改会抛出 UnsupportedOperationException
// emptyStringList.add("item"); // 运行时错误同样地,对于空映射:
立即学习“Java免费学习笔记(深入)”;
Map<String, Integer> emptyStringIntegerMap = Collections.emptyMap();
// 尝试修改会抛出 UnsupportedOperationException
// emptyStringIntegerMap.put("key", 1); // 运行时错误这些方法返回的实际上是同一个
EmptyList
EmptyMap
null
null
public List<User> findActiveUsers() {
// 假设查询数据库,如果没有任何活跃用户
// return null; // 这样做很糟糕
// return new ArrayList<>(); // 每次都创建新对象,浪费资源
return Collections.emptyList(); // 最优雅和高效的方式
}使用它们,你的代码会变得更安全,因为你明确地传递了一个空但合法的集合,调用方可以放心地遍历或调用集合方法,而无需担心
NullPointerException
这其实是一个关于代码健壮性、可读性和资源效率的权衡。我个人在编写代码时,总是倾向于避免
null
NullPointerException
null
null
size()
iterator()
Collections.emptyList()
Collections.emptyMap()
List<User> users = userService.findUsersByCriteria();
// 不管 users 是空的还是有内容的,下面的代码都不会抛出 NPE
for (User user : users) {
System.out.println(user.getName());
}
// 或者
if (users.isEmpty()) {
System.out.println("没有找到用户。");
}相比之下,如果方法返回
null
List<User> users = userService.findUsersByCriteria();
if (users != null) { // 额外的 null 检查
for (User user : users) {
System.out.println(user.getName());
}
} else {
System.out.println("没有找到用户。");
}这不仅增加了样板代码,也使得业务逻辑的表达变得不那么流畅。
再来说说为什么不应该频繁地
return new ArrayList<>()
new HashMap<>()
null
Collections.emptyList()
Collections.emptyMap()
所以,从我的经验来看,使用
Collections.emptyList()
尽管
Collections.emptyList()
Collections.emptyMap()
首先,最核心的限制就是不可变性。这两个方法返回的集合是完全不可修改的。任何尝试添加、删除或修改元素的操作都会导致
UnsupportedOperationException
Collections.emptyList()
例如,你可能有一个方法,它初始化一个列表,然后根据某些条件往里面添加元素:
public List<String> buildMessageList(boolean includeHeader, boolean includeFooter) {
// 假设这里需要一个可变的列表,后续会添加内容
// List<String> messages = Collections.emptyList(); // 错误!后续无法添加
List<String> messages = new ArrayList<>(); // 正确做法
if (includeHeader) {
messages.add("--- Header ---");
}
// ... 添加其他消息 ...
if (includeFooter) {
messages.add("--- Footer ---");
}
return messages;
}在这种情况下,即使初始时列表是空的,你也需要一个
ArrayList
其次,虽然
emptyList()
emptyMap()
EmptyList
EmptyMap
Collections
List
Map
再者,对于 Java 9 引入的
List.of()
Map.of()
Collections.emptyList()
List.of()
总的来说,当你的集合在整个生命周期中都必须保持为空,并且不接受任何修改时,
Collections.emptyList()
Collections.emptyMap()
ArrayList
HashMap
Java 9 及更高版本为创建不可变集合引入了更简洁、更直观的工厂方法,这在一定程度上提供了
Collections.emptyList()
Collections.emptyMap()
List
Set
Map
最值得一提的就是
List.of()
Map.of()
// 创建一个空的不可变列表
List<String> emptyListModern = List.of();
// 尝试修改会抛出 UnsupportedOperationException
// emptyListModern.add("item");
// 创建一个空的不可变映射
Map<String, Integer> emptyMapModern = Map.of();
// 尝试修改会抛出 UnsupportedOperationException
// emptyMapModern.put("key", 1);这些方法与
Collections.emptyList()
Collections.emptyMap()
UnsupportedOperationException
null
List.of()
Map.of()
Collections
那么,它们之间有什么区别,或者说,我该如何选择呢?
从功能上讲,对于创建空集合,
List.of()
Collections.emptyList()
Map.of()
Collections.emptyMap()
List.of()
Map.of()
Collections
List.of()
Map.of()
List<String> names = List.of("Alice", "Bob", "Charlie");
Map<String, Integer> ages = Map.of("Alice", 30, "Bob", 25);这使得它们在创建小规模固定集合时非常方便,避免了手动
add()
put()
Collections.emptyList()
Collections.emptyList()
List.of()
在实际项目中,如果你使用的是 Java 9 或更高版本,并且你的代码风格偏好现代 Java 的简洁性,那么使用
List.of()
Map.of()
Collections.emptyList()
以上就是如何在Java中使用Collections.emptyList和emptyMap的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号