[英]java.util.Collections$UnmodifiableRandomAccessList to Collections.singletonList
[英]Use of Java's Collections.singletonList()?
Java 中Collections.singletonList()
什么用? 我知道它返回一個包含一個元素的列表。 為什么我想要一個單獨的方法來做到這一點? 不變性在這里如何發揮作用?
這種方法是否有任何特殊有用的用例而不僅僅是一種方便的方法?
javadoc是這樣說的:
“返回一個僅包含指定對象的不可變列表。返回的列表是可序列化的。”
你問:
為什么我想要一個單獨的方法來做到這一點?
主要是為了方便...省去您必須編寫一系列語句來:
它也可能更快一些和/或節省一些內存,但這些小的節省不太可能是顯着的。 (至少可以說,創建大量單例列表的應用程序是不尋常的。)
不變性在這里如何發揮作用?
它是方法規范的一部分; 見上文。
這種方法是否有任何特殊有用的用例,而不僅僅是一種方便的方法?
顯然,有些用例可以方便地使用singletonList
方法。 但我不知道您將如何(客觀地)區分普通用例和“特別有用”的用例......
這是單例方法的一種觀點:
我發現這些不同的“單例”方法對於將單個值傳遞給需要該值集合的 API 很有用。 當然,這在處理傳入值的代碼不需要添加到集合時效果最好。
來自 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
將創建一個不可變的列表。 不可變列表(也稱為不可修改列表)不能更改其內容。 如果您嘗試更改內容,添加或刪除項目的方法將引發異常。
單例列表僅包含該項目且不能更改。
如果一個 Immutable/Singleton 集合是指只有一個對象並且沒有被進一步修改的集合,那么可以通過創建一個只有一個對象的集合“UnmodifiableCollection”來實現相同的功能。 既然 Unmodifiable Collection 可以用一個對象實現同樣的功能,那么 Singleton Collection 有什么特殊用途呢?
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.