Collections.singletonList()
Javaでの使用は何ですか?1つの要素を含むリストを返すことを理解しています。それを行う別の方法が必要なのはなぜですか?ここで不変性はどのように役割を果たしますか?
単に便利な方法ではなく、この方法の特別な有用なユースケースはありますか?
Collections.singletonList()
Javaでの使用は何ですか?1つの要素を含むリストを返すことを理解しています。それを行う別の方法が必要なのはなぜですか?ここで不変性はどのように役割を果たしますか?
単に便利な方法ではなく、この方法の特別な有用なユースケースはありますか?
回答:
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);
}
}
コードが読み取り専用リストを想定しているが、1つの要素のみを渡したい場合に使用します。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を定義することはできません。