Collections.singletonList()Java中有什么用?我了解它会返回一个包含一个元素的列表。我为什么要有一个单独的方法来做到这一点?不变性在这里如何发挥作用?
此方法是否有任何特殊有用的用例,而不仅仅是便捷的方法?
Collections.singletonList()Java中有什么用?我了解它会返回一个包含一个元素的列表。我为什么要有一个单独的方法来做到这一点?不变性在这里如何发挥作用?
此方法是否有任何特殊有用的用例,而不仅仅是便捷的方法?
Answers:
在javadoc中这样说:
“返回仅包含指定对象的不可变列表。返回的列表是可序列化的。”
你问:
我为什么要有一个单独的方法来做到这一点?
主要是为了方便...省去编写以下语句的麻烦:
它也可能会更快一些和/或节省一些内存,但是这些少量的节省不太可能是可观的。(至少可以说,创建大量单例列表的应用程序是不寻常的。)
不变性在这里如何发挥作用?
它是方法规范的一部分;往上看。
此方法是否有任何特殊有用的用例,而不仅仅是一种便捷方法?
显然,在一些用例中使用该singletonList方法很方便。但是我不知道您如何(客观地)区分普通用例和“特别有用”的用例...
从javadoc
@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是(线程)安全且快速的。
要回答您的一成不变的问题:
Collections.singletonList将创建一个不可变的列表。不变列表(也称为不可修改列表)不能更改其内容。如果您尝试更改内容,则添加或删除项目的方法将引发异常。
单例列表仅包含该项目,无法更改。
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。