当前位置: 首页 > 面试题库 >

当我们创建空的不可变列表/集合/映射时,是否有任何实际的应用/用例

钱承允
2023-03-14
问题内容

Java 9提供了一种创建Empty不可变列表,集合和映射的方法。

List list = List.of(); 
Set set = Set.of(); 
Map map = Map.of();

但是我不明白创建一个空的不可变列表/集合/映射的实际用例是什么。

请帮助我了解一个空的不可变列表/集合/映射的实际用例。


问题答案:

Java的9点之前,人们一度Collections.emptyList()Collections.emptySet()Collections.emptyMap(),这是明确的,并
完全 致力于生产不可修改的空集合。那List.of() 。能否做到这一点还取决于他们API的内部一致性,而不是革命性的新功能。

但是你的主要问题似乎是

请帮助我了解一个空的不可变列表/集合/映射的实际用例。

这实际上是三个问题:

  1. 空集合的用例是什么?

空集合很有用,因为它们是现实数据和算法中情况的自然表示。例如,“到目前为止,哪些乘客已经办理登机手续?”
当没有。哪些任务正在等待发送?我可以无休止地继续下去。

  1. 不可修改集合的用例是什么?

可以传递对不可修改集合的引用,而不必担心该集合将被修改(无论如何通过该引用)。很好地注意,假设已正确记录了不可修改性,则共享该对象所有参与者
都可以依靠它而不进行更改。除其他事项外,这对于安全共享集合(和其他不可修改的对象)而不制作副本很重要。

  1. 这些用例的交集是什么?

空集合自然出现在现实世界的数据和算法中,因此,大多数不可修改集合的用例都包含空集合。

此外,您没有提出询问,但是可能会忽略,尽管您不能将对象添加到不可修改的空集合中,但是您可以将其完全替换为非空集合,或者在下次或类似情况下提供非空集合。



 类似资料:
  • 我有一个与@OneToMany有关系的学生班级,比如下面的班级 和类实体: 我使用MapStruct将dto转换为实体,并将实体转换为dto: 学生地图绘制员。JAVA 类映射器。JAVA 这些映射器扩展了简单的EntityMapper接口 生成StudentMapperImpl。班 当我试图将学生DTO转换为学生DTO类中填充了class Id的学生实体时,一切都很好。当学生DTO中的class

  • 问题内容: 有一个对象列表。 使用它创建一个unmodifiableList。 我了解不支持添加/删除/设置操作。同时,它不是不变的,因为它引用了现有的可修改列表,并且每当对该列表进行更改时,这些更改也会反映出来。 这样就创建了一个不可变的列表。 由于使用了转换构造函数,因此创建了一个不可变的列表。无法执行添加/删除/设置操作,原始列表中的任何更改都不会反映在中。让我们假设对象也是不可变的。 现在

  • 我有一个Java/Kotlin互操作问题。一个Kotlin不可变列表被编译成一个普通的java.util.ArrayList,它是可变的! 静态编程语言(库): Java(消费者): 如何使我的 Kotlin 类从 Java 的角度来看也是完全不可变的?

  • 使用Java8 lambdas,在给定可能键的和的情况下,有效创建新的的“最佳”方法是什么?在这种情况下,您将得到一个包含可能的键的并希望生成一个其中是基于的某个方面构造的某种类型,即映射值类型。 我已经研究了几种方法,但认为一种方法比另一种方法更好(可能有一个例外--参见代码)。我将把“最佳”解释为代码清晰度和运行时效率的结合。这些是我想出来的。我肯定有人能做得更好,这是这个问题的一个方面。我不

  • 假设我有一组字符串和一个散列函数(或任何单边函数)和一个测试函数。我想用Java8流创建一个从输入字符串到通过测试函数的哈希值的映射。我的问题是如何在中编写? 看来老的for循环是最简洁的解决方案。