web-dev-qa-db-ja.com

JavaでList <String>オブジェクトを初期化する方法

次のようにリストを初期化することはできません。

List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));

私は次のようなエラーに直面します。

タイプList<String>をインスタンス化できません

List<String>をどのようにインスタンス化できますか?

352
ahmednabil88

API for Listを確認すると、次のように表示されます:

Interface List<E>

interfaceであることは、インスタンス化できないことを意味します(new List()は使用できません)。

そのリンクを確認すると、classを実装するいくつかのListesが見つかります。

すべての既知の実装クラス:

AbstractListAbstractSequentialListArrayListAttributeListCopyOnWriteArrayListLinkedListRoleListRoleUnresolvedListStackVector

それらはインスタンス化できます。彼らのリンクを使って、それらについてもっと知りましょう。つまり、どれがあなたのニーズにより合っているかを知るためです。

最も一般的に使用される3つは、おそらく次のとおりです。

 List<String> supplierNames1 = new ArrayList<String>();
 List<String> supplierNames2 = new LinkedList<String>();
 List<String> supplierNames3 = new Vector<String>();

ボーナス:
次のように、Arraysclassを使用して、より簡単な方法で値でインスタンス化することもできます。

List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));

ただし、fixed-sizeであるため、リストに要素を追加することはできません。

687
J.A.I.L.

インターフェースをインスタンス化することはできませんが、実装はほとんどありません。

JDK2

List<String> list = Arrays.asList("one", "two", "three");

JDK7

//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");

JDK8

List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());

JDK9

List<String> list = List.of("one", "two", "three");

さらに Guava のような他のライブラリによって提供される他の方法がたくさんあります。

List<String> list = Lists.newArrayList("one", "two", "three");
76
LazerBanana

Listは Interface であり、interfaceは慣例であるため、どのメソッドがあなたのクラスを持つべきなのか、Interfaceをインスタンス化することはできません。インスタンス化するためには、そのインターフェースのいくつかの実現(実装)が必要です。リストインターフェースの非常に人気のある実装で以下のコードを試してください:

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

または

List<String> supplierNames = new LinkedList<String>();
36
Doseke

ArrayList<String>などを使う必要があります。

List<String>はインターフェースです。

これを使って:

import Java.util.ArrayList;

...

List<String> supplierNames = new ArrayList<String>();
13
Ofir Farchy

リストはインタフェースであり、インタフェースを初期化することはできません。代わりに実装クラスをインスタンス化してください。

好きです:

List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();
11
Ankit

ほとんどの場合、シンプルなArrayList - Listの実装が必要です。

JDKバージョン7より前

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

JDK 7以降ではダイヤモンド演算子を使用できます

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

これ以上の情報はここに書かれています Oracleドキュメンテーション - コレクション

9
Daniel Perník

Listは単なるインタフェース、一般的なリストの定義です。このリストインターフェースの実装を提供する必要があります。最も一般的な2つは次のとおりです。

ArrayList - 配列に実装されたリスト

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

LinkedList - 相互に連結された要素の連鎖のように実装されたリスト

List<String> supplierNames = new LinkedList<String>();
8
Jakub Zaverka

one オブジェクトのみを含む immutable List<T>を作成するだけの場合は、次のAPIを使用できます。

List<String> oneObjectList = Collections.singletonList("theOnlyObject”);

より多くの情報: docs

6
Sakiboy

どの種類のListを使いたいかに応じて、

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

あなたは軌道に乗るべきです。

Listはインターフェース、ArrayListはListインターフェースの実装の1つです。 Listインタフェースの JavaDocs を読むことで、より自分のニーズに合った実装を見つけることができます。

6
Uli

リストはインタフェースです。あなたはそれを初期化するためにListを使うことができません。

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

これらはListの未実装クラスの一部です。

ArrayList, LinkedList, Vector

あなたはあなたの要求に従ってこれのどれでも使うことができます。これらの各クラスには独自の機能があります。

5
Suranga

念のために言っておきますが、この質問についてはまだ誰もが考えています。なぜなら、私は1人か2人の新しいユーザーが同じ質問をして、みんながそれを言っているのを見るので、いいえ、それはできません、親愛なる慎重さ、ここに与えられたすべての答えは別として、私は追加情報を提供したいと思います - はい、あなたは実際にすることができます、 List list = new List(); しかし、インタフェースのすべてのメソッドの実装を書くことを犠牲にして。概念は単にList list = new List()ではありません。しかし

List<Integer> list = new List<Integer>(){

        @Override
        public int size() {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public boolean isEmpty() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean contains(Object o) {
            // TODO Auto-generated method stub
            return false;
        }

.....など(Cantがすべてのメソッドを書きます)

これは 匿名クラス の例です。誰かが言うとき、それは正しいです、 いいえ、あなたはインターフェースを具体化することができません、 そしてそれは正しいです。しかし、あなたは言うことはできません、 あなたはList list = new List()を書くことはできません。 しかし、明らかにあなたはそれを行うことができ、それはあなたがすることはできませんを作るのは難しい声明です

3
yashpandey

soyuz-to を作成して、1つの問題を単純化しました:XYに変換する方法(例:StringInteger)。オブジェクトの構築も一種の変換であるため、MapListSetを構築する簡単な関数があります。

import io.thedocs.soyuz.to;

List<String> names = to.list("John", "Fedor");

それをチェックしてください-それは他の多くの便利な機能を持っています

0
fedor.belov