2016-11-15 42 views
1

在Java教程关于收集它指出:实施Collections.singleton作为一个静态工厂方法

Collections.singleton是返回一个只包含指定元素的不可变Set静态工厂方法。

为什么Collections.singleton需要返回不可变?

+4

它不需要*,它被设计成不可变的。 – Andreas

+2

就设计决策而言,如果知道其中只有一个数据(没有后备数组,它只是单个项目的一个字段),它确实允许您进行极其优化的设置。就像'emptySet'的实现可以有一个简单的'contains'方法。 –

+2

如果它是可变的,你可以添加或删除元素。这意味着它不是一个单身人士。 – shmosel

回答

2

我想你的问题是'为什么Collections.singleton方法(它们有三个用于列表,集合和映射)旨在返回一个不可变的集合?'

在这种情况下,单例只是一个元素的集合。因为集合只有一个对象(即单例),所以集合是不可变的:方法的客户端不应该能够添加或从集合中移除,因为这会破坏合同来存储单个对象。

+0

你对“单身”一词的逻辑根本不是真的。一个集合是一个单例,只要它有一个元素即可。正如你所暗示的,它与独特性或单体反模式无关。 –

+0

好吧,我会编辑以清楚说明。 – sprinter