Java中Collections.singletonList()
的用途是什么?据我所知,它返回一个包含一个元素的列表。为什么我想要一个单独的方法来做到这一点?不变性如何在这里发挥作用?
此方法是否有任何特殊有用的用例,而不仅仅是一种方便的方法?
答案 0 :(得分:135)
javadoc说:
“返回仅包含指定对象的不可变列表。返回的列表是可序列化的。”
你问:
为什么我想要一个单独的方法呢?
主要是为了方便...以节省你必须写一系列陈述:
它也可能更快一些和/或节省一点内存,但这些小额节省不太可能显着。 (创建大量单例列表的应用程序至少可以说是不寻常的。)
不变性如何在这里发挥作用?
这是方法规范的一部分;见上文。
这种方法有没有特别有用的用例,而不仅仅是一种方便的方法?
显然,有些用例可以方便地使用singletonList
方法。但我不知道你会如何(客观地)区分普通用例和“特别有用”用例......
答案 1 :(得分:25)
这是单身方法的一个view:
我发现这些不同的“单例”方法对于将单个值传递给需要该值集合的API非常有用。当然,当处理传入值的代码不需要添加到集合时,这种方法效果最好。
答案 2 :(得分:11)
@param the sole object to be stored in the returned list.
@return an immutable list containing only the specified object.
import java.util.*;
public class HelloWorld {
public static void main(String args[]) {
// create an array of string objs
String initList[] = { "One", "Two", "Four", "One",};
// create one list
List list = new ArrayList(Arrays.asList(initList));
System.out.println("List value before: "+list);
// create singleton list
list = Collections.singletonList("OnlyOneElement");
list.add("five"); //throws UnsupportedOperationException
System.out.println("List value after: "+list);
}
}
当代码需要只读列表时使用它,但您只想在其中传递一个元素。 singletonList
是(线程)安全且快速的。
答案 3 :(得分:2)
如果Immutable / Singleton集合引用的是仅具有一个对象并且未进一步修改的集合,则可以通过使集合“UnmodifiableCollection”仅具有一个对象来实现相同的功能。由于Unmodifiable Collection可以通过一个对象实现相同的功能,因此Singleton Collection有什么特殊用途?
答案 4 :(得分:2)
回答你不可改变的问题:
Collections.SingletonList
将创建一个不可变的List。
不可变列表(也称为不可修改列表)不能更改其内容。如果您尝试更改内容,添加或删除项目的方法将抛出异常。
单身人士名单仅包含该项目,不能更改。
答案 5 :(得分:1)
singletonList可以保存任何对象的实例。对象状态可以修改。
List<Character> list = new ArrayList<Character>();
list.add('X');
list.add('Y');
System.out.println("Initial list: "+ list);
List<List<Character>> list2 = Collections.singletonList(list);
list.add('Z');
System.out.println(list);
System.out.println(list2);
我们不能像上面那样定义unmodifiableList。