java - Collections.singleton() 返回 Set 而不是 Collection 有什么好处?

标签 java collections

Collections.singleton() method返回具有该单个参数的 Set 而不是 Collection

为什么会这样?据我所知,除了 SetCollection 的子类型之外,我看不出有什么优势......这仅仅是因为 Set extends Collection 无论如何,没有理由不这样做吗?

是的,还有Collections.singletonList()但这是另一回事,因为您可以使用 .get()...

List 访问随机元素

最佳答案

不可变

好处是在 that JavaDoc documentation 中读到的第一个形容词中找到的: 不可变

有时您使用的代码需要 Set (或 List 等)。在您自己的环境中,您可能只需要一个项目。要实现您自己的目标,即在需要在集合中显示该项目时强制执行仅单个项目的规则,请使用禁止您添加多个项目的 Set 实现。

Collections::singleton 上的“不可变”意味着,一旦创建,生成的 Set 对象保证有一个,并且只有一个项目。不为零,也不超过一个。不能再添加了。不能删除一个项目。

例如,假设您的代码正在与代表您公司的 CEO(首席执行官)的 Employee 对象一起工作。你的代码明确地只与 CEO 打交道,所以你知道一次只能有一个这样的 Employee 对象,总是只有一个 CEO。然而,您想要利用一些现有代码为指定的 Employee 对象集合创建报告。通过使用 Collection.singleton,您可以保证自己的代码不会错误地拥有一个员工,同时仍然能够传递 Set

Set< Employee > ceo = Collections.singleton( new Employee( "Tim Cook" ) ) ;  // Always exactly one item in this context, only one CEO is possible.

ceo.add( … ) ;     // Fails, as the collection is immutable.
ceo.clear() ;      // Fails, as the collection is immutable.
ceo.remove( … ) ;  // Fails, as the collection is immutable.

someReport.processEmployees( ceo ) ;

Java 9:Set.of & List.of

Java 9 及更高版本提供了新的接口(interface)方法 Set.ofList.of为了获得相同的效果,单个元素的不可变集合。

Set< Pet > pet = Set.of( someDog ) ;

兄弟 of 方法被重载以接受不可变集合中的任意数量的元素,而不仅仅是一个元素。

Set< Pet > pets = Set.of( someDog , someOtherDog , someCat ) ;

关于java - Collections.singleton() 返回 Set 而不是 Collection 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31599467/

相关文章:

java - 如何从 JSF 页面访问 get First() 和 get Last()?

ruby-on-rails - 在数组而不是对象上使用 collection_radio_buttons 的 Rails 表单

java - 如何从 Package Explorer 关闭 Eclipse 自动扩展 JRE 类?

java - 如何在 Eclipse 中安装 libvirt

java - 从本地 java 调用本地 php 脚本的最佳方式?

java - 如何调用JFreeChart的打印选项

java - 在java8中迭代嵌套对象

python - 如何在双端队列中打印项目(python)

java - 集合分配、浅复制、惰性复制和深复制的区别和最佳方法

java - Maven 项目采用文件夹结构而不是包的形式