web-dev-qa-db-ja.com

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

以下のようにSetを作成します。

Set myset = new HashSet()

JavaでどうやってListを作るのですか?

677
user93796
List myList = new ArrayList();

または総称を使って( Java 7 以降)

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

または総称を使って(旧Javaバージョン)

List<MyType> myList = new ArrayList<MyType>();
882
Dan Vinton

さらに、ものが入っているリストを作成したい場合は(固定サイズになりますが)、

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

要約して追加してみましょう。

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
167
Sergii Shevchyk

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!
37
Oleksandr

最初に this を読み、次に this を読み、 this を読みます。 10回のうち9回は、これら2つの実装のうちの1つを使用します。

実際には、 コレクションのフレームワークへのSunのガイド を読んでください。

30
Adam Jaskiewicz
//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
Blerta

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

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

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

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

不変リストのためには Guava ライブラリを使うことができます。

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

ListSet と同じように単なるインタフェースです。

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

それぞれのインターフェースのドキュメントを見れば、 "All Known Implementing Classes"が見つかり、どちらがあなたのニーズにより適しているかを決めることができます。

たぶん、それは ArrayList です。

20
Sorin Mocanu

ListSetのようなインターフェースであり、 汎用実装 としてArrayListLinkedListを持っています。

リストを作成することができます:

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

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

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

ArrayListの実装とは反対に、LinkedListを使うのがほとんどです。

  1. LinkedListはオブジェクトのためにたくさんのスペースを使い、たくさんの要素があるとパフォーマンスが悪くなります。
  2. LinkedListのインデックス付き演算は、ArrayListのO(n)と比較してO(1)時間が必要です。
  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は、Java 9で導入された本当に変更不可能なリストのインスタンスを返します。詳細については、 答え を確認してください。 Java 10におけるCollections.unmodifiableListCollectors.unmodifiableListの違い。

16
i_am_zero
List list = new ArrayList();

またはジェネリックと

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

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

9
Paulo Guedes

新しいArrayListではなく、ごくまれにですが、新しいLinkedListが必要な場合があります。 ArrayListから始めて、パフォーマンス上の問題があり、そのリストが問題であることの証拠があり、そのリストにたくさんの追加や削除を行った後 - 以前にはないが - LinkedListに切り替えて、状況が改善するかどうかを確かめる。しかし、主に、ArrayListを使い続けると、すべてうまくいくでしょう。

8
Carl Manaster

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

import com.google.common.collect.Lists;

// ...

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

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

可変引数の初期化とIterable<T>からの初期化にはオーバーロードがあります。

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

7
Ben Lings

一例です。

List somelist = new ArrayList();

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

7
Alex B
List<Object> nameOfList = new ArrayList<Object>();

ListArrayListをインポートする必要があります。

6
jp093121

Java 9では、不変Listを作成するために次のことができます。

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

List<Integer> mutableList = new ArrayList<>(immutableList);
6
Jacob G.

オプションとして、二重括弧の初期化をここで使うことができます。

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

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

セットとリストを作成する方法はたくさんあります。 HashSetとArrayListは、ほんの2つの例です。最近コレクションでジェネリックスを使用することもかなり一般的です。私はあなたが彼らが何であるか見てみることをお勧めします

これはJavaの組み込みコレクションの良い入門書です。 http://Java.Sun.com/javase/6/docs/technotes/guides/collections/overview.html

5
Peter Lawrey
List arrList = new ArrayList();

下記のようにジェネリックを使うのが良いでしょう。

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

arrList.add("one");

LinkedListを使用するとします。

List<String> lnkList = new LinkedList<String>();
5
Rohit Goyal

以下はリストを作成する方法です。

  • これは固定サイズのリストを作成します、要素を追加/削除することはできません、そうしようとするとJava.lang.UnsupportedOperationExceptionを投げます。

    List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});
    


  • 次のバージョンは、要素をいくつでも追加/削除できる単純なリストです。

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


  • これがJavaでLinkedListを作成する方法です。もしリストの要素を頻繁に挿入/削除する必要があるなら、LinkedListの代わりにArrayListを使うべきです。

    List<String> linkedList = new LinkedList<>();
    
4
Jobin Joseph

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
Craig P. Motlin

単一のエンティティを持つ直列化可能な不変リストが必要な場合は、次のものを使用できます。

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

これを試して:

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
Gavriel Cohen

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();
0
Mak