Javaで新しいリストを作成する方法


762

次のものを作成しますSet

Set myset = new HashSet()

ListJavaでどのように作成しますか?


1
リストのjavadoc。「すべての既知の実装クラス:AbstractList、AbstractSequentialList、ArrayList、AttributeList、CopyOnWriteArrayList、LinkedList、RoleList、RoleUnresolvedList、Stack、Vector」
KitsuneYMG 2009年

121
この質問は、「java create list」に対するGoogleの上位ヒットの1つであり、非常に役立つ一連の回答があるため、私にとっては十分に妥当な質問のようです:-)
JosephH

52
それは良い答えで良い質問です。Stack Overflowの目的の1つは、少なくともサイトの創設者によると、プログラミングの質問に対してある種の標準的な回答を作成することです。ですから、誘惑に抵抗することができるなら、将来これらの種類の投稿に反対票を投じないようにしてください。
eggonlegs

回答:


977
List myList = new ArrayList();

またはジェネリック(Java 7以降)

List<MyType> myList = new ArrayList<>();

またはジェネリック(古いJavaバージョン)

List<MyType> myList = new ArrayList<MyType>();

68
ArrayListは唯一の種類のリストではないことに注意してください。質問に関しては、HashSetが唯一の種類のセットではありません。
スリム

17
Javaドキュメントでリストインターフェースを調べて、リストを実装するすべてのクラスの明確なリストを取得できると誰も言っていないことに驚きます:docs.oracle.com/javase/7/docs/api/java/util /List.html
David Mason

5
IDEを使用している場合は、通常、そこにタイプ階層を表示することもできます。Eclipseでは、デフォルトのショートカットはF4で、IDEAではCtrl + Hです。
David Mason

1
私が理解していることから、C#MSDNの
JohnOsborne

5
<がMyType>は単に<> Javaの7と8のために置き換えることが可能な第2の明示的な型の引数
Jannik

469

さらに、中に物があるリストを作成したい場合(サイズは固定されますが):

List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");

15
注意点は、このタイプのリスト(asList()によって返されるリスト)は不変であることです。
Avrom、2009年

70
@Avron-間違っています:固定サイズのみです:サイズを変更することはできませんが、内容を変更することはできます(警告の警告ですか?)
user85421 2009年

驚くばかり。簡潔にしていただきありがとうございます。
Rクラベン2015

1
リストに1つしかない場合は、Arrays.asList()の代わりにCollections.singletonList()を使用します。(しかし、私は理由を知りません。)
MikeB

@MikeB理由がわからない場合は、arrays.aslistを使用してください
bharal

183

要約して何かを追加しましょう:

JDK

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番目の例も不変ではありません(その行を削除します)。
Xaerxess、2014年

9
ジェネリックを使用しないことは、これを読むすべての開発者にとって本当に「良い」例になります。
Natix 2014

60

Java 8

固定サイズの空でないリストを作成するには(追加、削除などの操作はサポートされていません):

List<Integer> list = Arrays.asList(1, 2); // but, list.set(...) is supported

空でない可変リストを作成するには:

List<Integer> list = new ArrayList<>(Arrays.asList(3, 4));

Java 9

新しいList.of(...)静的ファクトリメソッドの使用:

List<Integer> immutableList = List.of(1, 2);

List<Integer> mutableList = new ArrayList<>(List.of(3, 4));

Java 10

使用してローカル変数タイプ推論を

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!

1
こんにちは、これらの違いとJavaの進化をどこで学べるかを教えていただけませんか とても面白いようです!
shiv

31

まずこれを読んでから、これこれを読んでください。10回のうち9回は、これら2つの実装のいずれかを使用します。

実際、Sunのコレクションフレームワークガイドをお読みください。


11
私も「10のうちの8回」を追加したいあなたは、それは単に10のうちの9.9倍に問題ではないという理由だけで、ArrayListのを使用します
ヨアヒム・ザウアー

1
LinkedListは、目的を本当に気にするだけの場合、意味的に適切です。
Adam Jaskiewicz、2009年

LinkedListsは、繰り返し処理する場合に最適です。私には、リンクされたリストの方が洗練されているように見えますが、それはおそらく、Javaの前にlispを学んだからかもしれません。
KarlP 2009年

@カルプ合意。ほとんどの場合、ArrayListとLinkedListの間の時間は約50/50ですが、答えは必ずしも操作の複雑さについてではありません。多くの場合、それは当面の問題に適切と思われるものです。
Adam Jaskiewicz、2009年

1
ほとんどいつも使っていましたArrayList。リストの末尾のみを処理している場合、それは両端キュー(またはキュー)であり、ArrayDeque実装を使用します。その理由は、アレイベースの実装空のスロットでメモリを浪費する可能性があるにもかかわらず(必要な容量を予測できない場合)、小さなコレクションの場合、これはリンクリスト内のすべてのノードインスタンスのオーバーヘッドに相当します(またはdeque)。そして見返りに、ランダムアクセスを取得します。どのようなユニークなメリットがありLinkedListますか?
エリクソン2013

21
//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());

21

Java 7には、ジェネリックインスタンスの作成のための型推論があるため、割り当ての右側でジェネリックパラメーターを複製する必要はありません。

List<String> list = new ArrayList<>();

固定サイズのリストは、次のように定義できます。

List<String> list = Arrays.asList("foo", "bar");

不変のリストでは、Guavaライブラリを使用できます。

List<String> list = ImmutableList.of("foo", "bar");

この宣言について質問がありますList <String> list = Arrays.asList( "foo"、 "bar"); 宣言のリストがオブジェクトかどうか疑問に思っていますか?

20

Listは、Setと同じインターフェイスです。

HashSetは、パフォーマンスの追加/検索/削除に関して特定のプロパティを持つSetの実装であるように、ArrayListはListのベア実装です。

それぞれのインターフェースのドキュメントを参照すると、「すべての既知の実装クラス」が見つかり、どれがニーズに適しているかを判断できます。

たぶん、それはArrayListです


18

ListインタフェースのようなものであるSetと有しArrayList且つLinkedListとして汎用実装

リストは次のように作成できます。

 List<String> arrayList = new ArrayList<>();
 List<String> linkedList = new LinkedList<>(); 

次のように固定サイズのリストを作成することもできます。

List<String> list = Arrays.asList("A", "B", "C");

ほとんどの場合ArrayListLinkedList実装ではなく反対を使用します。

  1. LinkedList オブジェクトに多くのスペースを使用し、要素が多い場合はパフォーマンスが低下します。
  2. のインデックス付き操作でLinkedListは、のO(1)と比較してO(n)時間が必要ArrayListです。
  3. 詳細については、このリンクを確認してください。

Arrays.asList上記で作成されたリストは構造的には変更できませんが、その要素は変更できます。

Java 8

どおりDOC、方法は、Collections.unmodifiableList指定されたリストの変更不可能なビューを返します。私たちはそれを次のように得ることができます:

Collections.unmodifiableList(Arrays.asList("A", "B", "C"));

Java 9

Java 9を使用している場合:

List<String> list = List.of("A", "B");

Java 10

ケースでは、この方法はJavaの10でありCollectors.unmodifiableList、このチェック9. Javaで導入された真の変更不可能なリストのインスタンスを返します答えをの違いについての詳細はCollections.unmodifiableListCollectors.unmodifiableListジャワ10


9

時々-非常にまれですが-新しいArrayListの代わりに、新しいLinkedListが必要になる場合があります。ArrayListから始めて、パフォーマンスに問題があり、リストが問題であるという証拠がある場合は、そのリストに多くの追加と削除を行います。その前にではなく、LinkedListに切り替えて、改善されるかどうかを確認します。しかし、メインでは、ArrayListを使い続ければ、すべてうまくいくでしょう。


9
List list = new ArrayList();

またはジェネリックで

List<String> list = new ArrayList<String>();

もちろん、stringをIntegerなどの任意のタイプの変数に置き換えることもできます。


7

一例:

List somelist = new ArrayList();

リストjavadocをListて、Java APIに含まれているインターフェースのすべての既知の実装クラスを見つけることができます。


7

Googleコレクションを使用すると、Listsクラスで次のメソッドを使用できます

import com.google.common.collect.Lists;

// ...

List<String> strings = Lists.newArrayList();

List<Integer> integers = Lists.newLinkedList();

varargsの初期化とからの初期化にはオーバーロードがありますIterable<T>

これらのメソッドの利点は、コンストラクターの場合のようにジェネリックパラメーターを明示的に指定する必要がないことです。コンパイラーは変数の型からパラメーターを推測します。


6
List<Object> nameOfList = new ArrayList<Object>();

とをインポートする必要がListありArrayListます。


6

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));

6

Java 9では、以下を実行して不変 を作成できますList

List<Integer> immutableList = List.of(1, 2, 3, 4, 5);

List<Integer> mutableList = new ArrayList<>(immutableList);

6

オプションとして、ここで二重ブレース初期化を使用できます。

List<String> list = new ArrayList<String>(){
  {
   add("a");
   add("b");
  }
};

2
これは高価な操作です。ここでは、ArrayListの匿名サブクラスを作成しています。
Vikram Bodicherla 2014

@VikramBodicherla同意する。ここでは、構文糖について詳しく説明します。
angry_gopher 2014


5
List arrList = new ArrayList();

以下に示すように、ジェネリックを使用する方がよいでしょう。

List<String> arrList = new ArrayList<String>();

arrList.add("one");

LinkedListを使用する場合。

List<String> lnkList = new LinkedList<String>();

4

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コレクションのコミッターです。


4

以下は、リストを作成するいくつかの方法です。

  • これは、固定サイズのリストを作成します。要素の追加/削除はできません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<>();

1
使用できますArrays.asList("Male", "Female")
ジョニー

3

これを試して:

List<String> messages = Arrays.asList("bla1", "bla2", "bla3");

または:

List<String> list1 = Lists.mutable.empty(); // Empty
List<String> list2 = Lists.mutable.of("One", "Two", "Three");

2

単一のエンティティを含むシリアル化可能な不変のリストが必要な場合は、以下を使用できます。

List<String> singList = Collections.singletonList("stackoverlow");

2

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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.