它的工作原理就像一个魅力:
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]
事实上Collections.singletonList(null)
是不变的(这是不幸的是隐藏在Java中[1]),但异常是从您的list
变量抛出。显然,这是不可改变的,以及像下面的例子中:
List<String> list = Arrays.asList("abc", null, "def");
list.removeAll(Collections.singletonList(null));
此代码将抛出UnsupportedOperationException
。所以你可以看到singletonList()
在这种情况下很有用。当客户端代码需要一个只读列表(它不会修改它)时使用它,但你只想传递一个元素。 singletonList()
是(线程)安全的(由于不变性),快速而紧凑。
[1] E.g.在scala中有一个用于可变和不可变集合的独立层次结构,并且API可以选择它是接受这个还是另一个(或者两者,因为它们具有公共基接口)
您是如何声明该列表的?使用Arrays.asList()?如果是这样,那么它将是不可变的 – Murugesh