它的工作原理就像一個魅力:
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