webentwicklung-frage-antwort-db.com.de

Wie initialisiere ich ein List <String> -Objekt in Java?

Ich kann eine Liste nicht wie im folgenden Code initialisieren:

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

Ich stelle den folgenden Fehler gegenüber:

Der Typ List<String> kann nicht instanziiert werden

Wie kann ich List<String> instanziieren?

366
ahmednabil88

Wenn Sie das API auf List prüfen, werden Sie feststellen, dass darin steht:

Interface List<E>

Ein interface zu sein bedeutet, dass es nicht instanziiert werden kann (es ist keine new List() möglich).

Wenn Sie diesen Link überprüfen, finden Sie einige classes, die List implementieren:

Alle bekannten implementierenden Klassen:

AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector

Diese können instanziiert werden. Verwenden Sie ihre Links, um mehr über sie zu erfahren.

Die 3 am häufigsten verwendeten sind wahrscheinlich:

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

Bonus:
Sie können es auch auf einfachere Weise mit Werten instanziieren, indem Sie Arraysclass wie folgt verwenden:

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

Beachten Sie jedoch, dass Sie dieser Liste keine weiteren Elemente hinzufügen dürfen, da es sich um fixed-size Handelt.

687
J.A.I.L.

Eine Schnittstelle kann nicht instanziiert werden, es gibt jedoch einige Implementierungen:

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

// creates immutable lists, so you can't modify such list 
List<String> immutableList = List.of("one", "two", "three");

// if we want mutable list we can copy content of immutable list 
// to mutable one for instance via copy-constructor (which creates shallow copy)
List<String> mutableList = new ArrayList<>(List.of("one", "two", "three"));

Außerdem gibt es viele andere Möglichkeiten, die von anderen Bibliotheken bereitgestellt werden, z. B. Guava.

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

Liste ist ein Interface, Sie können kein Interface instanziieren, da Interface eine Konvention ist, welche Methoden Ihre Klassen haben sollen. Zum Instanziieren benötigen Sie einige Realisierungen (Implementierungen) dieser Schnittstelle. Probieren Sie den folgenden Code mit sehr beliebten Implementierungen der List-Schnittstelle aus:

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

oder

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

Sie müssen ArrayList<String> oder ein solches verwenden.

List<String> ist eine Schnittstelle.

Benutze das:

import Java.util.ArrayList;

...

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

Liste ist eine Schnittstelle, und Sie können eine Schnittstelle nicht initialisieren. Instanziieren Sie stattdessen eine implementierende Klasse.

Mögen:

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

In den meisten Fällen möchten Sie einfach ArrayList - eine Implementierung von List

Vor JDK Version 7

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

Ab JDK 7 können Sie den Diamantoperator verwenden

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

Weitere Informationen finden Sie hier Oracle Dokumentation - Sammlungen

9
Daniel Perník

Liste ist nur eine Schnittstelle, eine Definition einer generischen Liste. Sie müssen eine Implementierung dieser Listenschnittstelle bereitstellen. Zwei am häufigsten sind:

ArrayList - Eine Liste, die über ein Array implementiert ist

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

LinkedList - Eine Liste, die wie eine zusammenhängende Kette von Elementen implementiert ist

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

Wenn Sie nur ein unveränderliches List<T> mit nur einem Objekt erstellen möchten, können Sie diese API verwenden:

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

Weitere Informationen: docs

6
Sakiboy

Abhängig davon, welche Art von Liste Sie verwenden möchten

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

sollte dich zum Laufen bringen.

List ist die Schnittstelle, ArrayList ist eine Implementierung der List-Schnittstelle. Weitere Implementierungen, die möglicherweise besser zu Ihren Anforderungen passen, finden Sie in den JavaDocs der List-Schnittstelle .

6
Uli

Liste ist eine Schnittstelle. Sie können List nicht verwenden, um es zu initialisieren.

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

Dies sind einige von List impelemented Klassen,

ArrayList, LinkedList, Vector

Sie können jedes dieser Elemente gemäß Ihren Anforderungen verwenden. Diese Klassen haben jeweils ihre eigenen Funktionen.

5
Suranga

Nur für den Fall, dass sich noch jemand mit dieser Frage beschäftigt. Weil ich sehe, dass ein oder zwei neue Benutzer wieder die gleiche Frage stellen und jeder dann sagt, Nein, das kannst du nicht, liebe Klugheit , abgesehen von Zu allen hier gegebenen Antworten möchte ich zusätzliche Informationen geben. - Ja, das können Sie tatsächlich tun. List list = new List (); Aber auf Kosten des Schreibens von Implementierungen aller Methoden von Interfaces. Der Begriff ist nicht einfach List list = new List (); aber

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

..... und so weiter (Kann nicht alle Methoden schreiben.)

Dies ist ein Beispiel für anonyme Klasse. Es ist richtig, wenn jemand angibt, Nein, Sie können keine Schnittstelle instanziieren und das ist richtig. Aber Sie können niemals sagen, Sie KÖNNEN NICHT schreiben List list = new List (); aber offensichtlich können Sie das tun und das ist eine harte Aussage , die Sie machen können nicht tun .

3
yashpandey

Wir haben soyuz-to erstellt, um 1 Problem zu vereinfachen: wie X in Y konvertiert wird (z. B. String in Integer). Das Konstruieren eines Objekts ist auch eine Art Konvertierung, sodass es eine einfache Funktion zum Konstruieren von Map, List, Set hat:

import io.thedocs.soyuz.to;

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

Bitte überprüfen Sie es - es hat viele andere nützliche Funktionen

0
fedor.belov