次のものを作成しますSet
。
Set myset = new HashSet()
List
Javaでどのように作成しますか?
次のものを作成しますSet
。
Set myset = new HashSet()
List
Javaでどのように作成しますか?
回答:
List myList = new ArrayList();
またはジェネリック(Java 7以降)
List<MyType> myList = new ArrayList<>();
またはジェネリック(古いJavaバージョン)
List<MyType> myList = new ArrayList<MyType>();
さらに、中に物があるリストを作成したい場合(サイズは固定されますが):
List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");
要約して何かを追加しましょう:
1. new ArrayList<String>();
2. Arrays.asList("A", "B", "C")
1. Lists.newArrayList("Mike", "John", "Lesly");
2. Lists.asList("A","B", new String [] {"C", "D"});
不変リスト
1. Collections.unmodifiableList(new ArrayList<String>(Arrays.asList("A","B")));
2. ImmutableList.builder() // Guava
.add("A")
.add("B").build();
3. ImmutableList.of("A", "B"); // Guava
4. ImmutableList.copyOf(Lists.newArrayList("A", "B", "C")); // Guava
空の不変リスト
1. Collections.emptyList();
2. Collections.EMPTY_LIST;
キャラクター一覧
1. Lists.charactersOf("String") // Guava
2. Lists.newArrayList(Splitter.fixedLength(1).split("String")) // Guava
整数のリスト
Ints.asList(1,2,3); // Guava
Ints.asList
不変のリストは作成しませんが、intの指定された配列に基づく固定サイズのリストを作成します(つまり、をサポートしますList.set(int, Object)
)。「Immutable List of Characters」の2番目の例も不変ではありません(その行を削除します)。
固定サイズの空でないリストを作成するには(追加、削除などの操作はサポートされていません):
List<Integer> list = Arrays.asList(1, 2); // but, list.set(...) is supported
空でない可変リストを作成するには:
List<Integer> list = new ArrayList<>(Arrays.asList(3, 4));
新しいList.of(...)
静的ファクトリメソッドの使用:
List<Integer> immutableList = List.of(1, 2);
List<Integer> mutableList = new ArrayList<>(List.of(3, 4));
使用してローカル変数タイプ推論を:
var list1 = List.of(1, 2);
var list2 = new ArrayList<>(List.of(3, 4));
var list3 = new ArrayList<String>();
そしてベストプラクティスに従ってください...
Java 5以降、ジェネリックスは言語の一部となっています-ジェネリックを使用する必要があります:
List<String> list = new ArrayList<>(); // Good, List of String
List list = new ArrayList(); // Bad, don't do that!
たとえば、List
インターフェイスにプログラムします。
List<Double> list = new ArrayList<>();
の代わりに:
ArrayList<Double> list = new ArrayList<>(); // This is a bad idea!
まずこれを読んでから、これとこれを読んでください。10回のうち9回は、これら2つの実装のいずれかを使用します。
実際、Sunのコレクションフレームワークガイドをお読みください。
ArrayList
。リストの末尾のみを処理している場合、それは両端キュー(またはキュー)であり、ArrayDeque
実装を使用します。その理由は、アレイベースの実装が空のスロットでメモリを浪費する可能性があるにもかかわらず(必要な容量を予測できない場合)、小さなコレクションの場合、これはリンクリスト内のすべてのノードインスタンスのオーバーヘッドに相当します(またはdeque)。そして見返りに、ランダムアクセスを取得します。どのようなユニークなメリットがありLinkedList
ますか?
//simple example creating a list form a string array
String[] myStrings = new String[] {"Elem1","Elem2","Elem3","Elem4","Elem5"};
List mylist = Arrays.asList(myStrings );
//getting an iterator object to browse list items
Iterator itr= mylist.iterator();
System.out.println("Displaying List Elements,");
while(itr.hasNext())
System.out.println(itr.next());
Java 7には、ジェネリックインスタンスの作成のための型推論があるため、割り当ての右側でジェネリックパラメーターを複製する必要はありません。
List<String> list = new ArrayList<>();
固定サイズのリストは、次のように定義できます。
List<String> list = Arrays.asList("foo", "bar");
不変のリストでは、Guavaライブラリを使用できます。
List<String> list = ImmutableList.of("foo", "bar");
HashSetは、パフォーマンスの追加/検索/削除に関して特定のプロパティを持つSetの実装であるように、ArrayListはListのベア実装です。
それぞれのインターフェースのドキュメントを参照すると、「すべての既知の実装クラス」が見つかり、どれがニーズに適しているかを判断できます。
たぶん、それはArrayListです。
List
インタフェースのようなものであるSet
と有しArrayList
且つLinkedList
として汎用実装。
リストは次のように作成できます。
List<String> arrayList = new ArrayList<>();
List<String> linkedList = new LinkedList<>();
次のように固定サイズのリストを作成することもできます。
List<String> list = Arrays.asList("A", "B", "C");
ほとんどの場合ArrayList
、LinkedList
実装ではなく反対を使用します。
LinkedList
オブジェクトに多くのスペースを使用し、要素が多い場合はパフォーマンスが低下します。LinkedList
は、のO(1)と比較してO(n)時間が必要ArrayList
です。Arrays.asList
上記で作成されたリストは構造的には変更できませんが、その要素は変更できます。
どおりDOC、方法は、Collections.unmodifiableList
指定されたリストの変更不可能なビューを返します。私たちはそれを次のように得ることができます:
Collections.unmodifiableList(Arrays.asList("A", "B", "C"));
Java 9を使用している場合:
List<String> list = List.of("A", "B");
ケースでは、この方法はJavaの10でありCollectors.unmodifiableList
、このチェック9. Javaで導入された真の変更不可能なリストのインスタンスを返します答えをの違いについての詳細はCollections.unmodifiableList
対Collectors.unmodifiableList
中ジャワ10。
Googleコレクションを使用すると、Listsクラスで次のメソッドを使用できます
import com.google.common.collect.Lists;
// ...
List<String> strings = Lists.newArrayList();
List<Integer> integers = Lists.newLinkedList();
varargsの初期化とからの初期化にはオーバーロードがありますIterable<T>
。
これらのメソッドの利点は、コンストラクターの場合のようにジェネリックパラメーターを明示的に指定する必要がないことです。コンパイラーは変数の型からパラメーターを推測します。
Java 8で同じことを行うためのより多くのオプションがあり、良くない、悪くはない、ただ違う、そしてリストで追加の作業をしたい場合、Streamsはより多くの選択肢(フィルター、マップ、リデュースなど)を提供します
List<String> listA = Stream.of("a", "B", "C").collect(Collectors.toList());
List<Integer> listB = IntStream.range(10, 20).boxed().collect(Collectors.toList());
List<Double> listC = DoubleStream.generate(() -> { return new Random().nextDouble(); }).limit(10).boxed().collect(Collectors.toList());
LinkedList<Integer> listD = Stream.iterate(0, x -> x++).limit(10).collect(Collectors.toCollection(LinkedList::new));
オプションとして、ここで二重ブレース初期化を使用できます。
List<String> list = new ArrayList<String>(){
{
add("a");
add("b");
}
};
セットとリストを作成するには多くの方法があります。HashSetとArrayListは2つの例にすぎません。最近ではジェネリックをコレクションで使用することもかなり一般的です。それらが何であるかを見てみることをお勧めします
これは、Javaの組み込みコレクションの良い紹介です。http://java.sun.com/javase/6/docs/technotes/guides/collections/overview.html
List arrList = new ArrayList();
以下に示すように、ジェネリックを使用する方がよいでしょう。
List<String> arrList = new ArrayList<String>();
arrList.add("one");
LinkedListを使用する場合。
List<String> lnkList = new LinkedList<String>();
Eclipseコレクションを使用すると、次のようなリストを作成できます。
List<String> list1 = Lists.mutable.empty();
List<String> list2 = Lists.mutable.of("One", "Two", "Three");
不変のリストが必要な場合:
ImmutableList<String> list3 = Lists.immutable.empty();
ImmutableList<String> list4 = Lists.immutable.of("One", "Two", "Three");
プリミティブリストを使用すると、自動ボックス化を回避できます。次に、intリストを作成する方法を示します。
MutableIntList list5 = IntLists.mutable.empty();
MutableIntList list6 = IntLists.mutable.of(1, 2, 3);
ImmutableIntList list7 = IntLists.immutable.empty();
ImmutableIntList list8 = IntLists.immutable.of(1, 2, 3);
8つのプリミティブすべてにバリアントがあります。
MutableLongList longList = LongLists.mutable.of(1L, 2L, 3L);
MutableCharList charList = CharLists.mutable.of('a', 'b', 'c');
MutableShortList shortList = ShortLists.mutable.of((short) 1, (short) 2, (short) 3);
MutableByteList byteList = ByteLists.mutable.of((byte) 1, (byte) 2, (byte) 3);
MutableBooleanList booleanList = BooleanLists.mutable.of(true, false);
MutableFloatList floatList = FloatLists.mutable.of(1.0f, 2.0f, 3.0f);
MutableDoubleList doubleList = DoubleLists.mutable.of(1.0, 2.0, 3.0);
注:私はEclipseコレクションのコミッターです。
以下は、リストを作成するいくつかの方法です。
これは、固定サイズのリストを作成します。要素の追加/削除はできませんjava.lang.UnsupportedOperationException
。そうしようとすると、スローされます。
List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});
次のバージョンは、任意の数の要素を追加/削除できる単純なリストです。
List<String> list = new ArrayList<>();
これはLinkedList
、Javaでaを作成する方法です。リストの要素を頻繁に挿入/削除する必要がある場合は、LinkedList
代わりにArrayList
List<String> linkedList = new LinkedList<>();
Arrays.asList("Male", "Female")
。
単一のエンティティを含むシリアル化可能な不変のリストが必要な場合は、以下を使用できます。
List<String> singList = Collections.singletonList("stackoverlow");
Javaでの配列リストの宣言は
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
Javaで配列リストを作成および初期化する方法は多数あります。
1) List list = new ArrayList();
2) List<type> myList = new ArrayList<>();
3) List<type> myList = new ArrayList<type>();
4) Using Utility class
List<Integer> list = Arrays.asList(8, 4);
Collections.unmodifiableList(Arrays.asList("a", "b", "c"));
5) Using static factory method
List<Integer> immutableList = List.of(1, 2);
6) Creation and initializing at a time
List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});
Again you can create different types of list. All has their own characteristics
List a = new ArrayList();
List b = new LinkedList();
List c = new Vector();
List d = new Stack();
List e = new CopyOnWriteArrayList();