Collections.singleton()
method返回具有该单个参数的 Set
而不是 Collection
。
为什么会这样?据我所知,除了 Set
是 Collection
的子类型之外,我看不出有什么优势......这仅仅是因为 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.of
和 List.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/