它就像一个魅力:
List<String> list = new ArrayList<String>();
list.add("abc");
list.add(null);
list.add("def");
list.removeAll(Collections.singletonList(null));
System.out.println(list); //[abc, def]
IndeedCollections.singletonList(null)
是不可变的(不幸的是,它隐藏在 Java [1]list
中),但是从您的变量中抛出了异常。显然它也是不可变的,如下例所示:
List<String> list = Arrays.asList("abc", null, "def");
list.removeAll(Collections.singletonList(null));
此代码将抛出一个UnsupportedOperationException
. 如您所见singletonList()
,在这种情况下很有用。当客户端代码需要一个只读列表(它不会修改它)但您只想在其中传递一个元素时使用它。singletonList()
是(线程)安全的(由于不变性),快速且紧凑。
[1]例如,在scala中,可变和不可变集合有一个单独的层次结构,API 可以选择是否接受这个或另一个(或两者,因为它们具有通用的基本接口)