Heim  >  Artikel  >  Java  >  So konvertieren Sie ein Array in eine Liste in Java

So konvertieren Sie ein Array in eine Liste in Java

WBOY
WBOYnach vorne
2023-04-19 09:13:042905Durchsuche

1. Die gebräuchlichste Methode (nicht unbedingt die beste)

Mit der Methode Arrays.asList(strArray) können Sie die Liste nach der Konvertierung nicht hinzufügen oder löschen, sondern nur überprüfen und ändern. andernfalls wird eine Ausnahme ausgelöst.

Schlüsselcode: List list = Arrays.asList(strArray);

private void testArrayCastToListError() {   String[] strArray = new String[2];   List list = Arrays.asList(strArray);   //对转换后的list插入一条数据   list.add("1");   System.out.println(list);  }

Ausführungsergebnis:

Exception in thread "main" java.lang.UnsupportedOperationException  at java.util.AbstractList.add(AbstractList.java:148)  at java.util.AbstractList.add(AbstractList.java:108)  at com.darwin.junit.Calculator.testArrayCastToList(Calculator.java:19)  at com.darwin.junit.Calculator.main(Calculator.java:44)

Das Programm löst eine Ausnahme bei list.add("1") aus: UnsupportedOperationException.

Ursachenanalyse:

Der Rückgabewert von Arrays.asList(strArray) ist eine private statische interne Klasse java.util.Arrays.ArrayList in der Klasse java.util.Arrays, die nicht die Klasse java.util.ArrayList ist. Die Klasse „java.util.Arrays.ArrayList“ verfügt über die Methoden „set()“, „get()“, „contains()“ und andere, verfügt jedoch nicht über die Methoden „add()“ oder „remove()“, sodass beim Aufruf der Methode „add()“ ein Fehler gemeldet wird .

Verwendungsszenarien: Die Methode Arrays.asList(strArray) kann nur nach der Konvertierung eines Arrays in eine Liste verwendet werden. Es ist nicht erforderlich, darin Werte hinzuzufügen oder zu löschen. Sie kann nur als Datenquelle zum Lesen verwendet werden.

2. Nachdem das Array in eine Liste konvertiert wurde, wird die Methode zum Hinzufügen, Löschen, Ändern und Überprüfen unterstützt.

Konvertieren Sie den Rückgabewert von Arrays.asList(strArray) von java.util.Arrays.ArrayList in java. util über den Konstruktor von ArrayList.

Schlüsselcode: ArrayList

private void testArrayCastToListRight() {   String[] strArray = new String[2];   ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;   list.add("1");   System.out.println(list);  }

Ausführungsergebnis: Ein Element „1“ wurde erfolgreich angehängt.

[null, null, 1]

Verwendungsszenario: Nach dem Konvertieren des Arrays in eine Liste müssen Sie die Liste hinzufügen, löschen, ändern und abfragen. Dies kann verwendet werden, wenn die Datenmenge in der Liste nicht groß ist.

3. Über die Collections.addAll()-Methode der Collection-Tool-Klasse (die effizienteste)

Konvertieren Sie über Collections.addAll(arrayList, strArray) eine Liste mit der gleichen Länge entsprechend der Länge des Array, und verwenden Sie dann die Methode Collections.addAll(), konvertieren Sie die Elemente im Array in Binärdateien und fügen Sie sie dann zur Liste hinzu. Dies ist die effizienteste Methode.

Schlüsselcode:

ArrayList< String> arrayList = new ArrayList<String>(strArray.length); Collections.addAll(arrayList, strArray);

Test:

private void testArrayCastToListEfficient(){   String[] strArray = new String[2];   ArrayList< String> arrayList = new ArrayList<String>(strArray.length);   Collections.addAll(arrayList, strArray);   arrayList.add("1");   System.out.println(arrayList);  }

Ausführungsergebnis: Ein Element „1“ wurde ebenfalls erfolgreich angehängt.

[null, null, 1]

Verwendungsszenario: Nach dem Konvertieren des Arrays in eine Liste müssen Sie die Liste hinzufügen, löschen, ändern und abfragen. Wenn die Datenmenge in der Liste groß ist, verwenden Sie sie zuerst, was die Betriebsgeschwindigkeit verbessern kann.

Hinweis: Im Anhang finden Sie den Quellcode der Collections.addAll()-Methode:

public static <T> boolean addAll(Collection<? super T> c, T... elements) {         boolean result = false;         for (T element : elements)             result |= c.add(element);//result和c.add(element)按位或运算,然后赋值给result         return result;     }

Frage und Antwort Frage: Wenn der Array-Typ ein Integer-Array ist, wird bei der Konvertierung in eine Liste ein Fehler gemeldet?

Antwort: Getestet in einer JDK1.8-Umgebung. Mit den drei Konvertierungsmethoden gibt es kein Problem. Verwenden Sie es mit Zuversicht. Die Methode und die Testergebnisse für die Konvertierung des Integer[]-Integer-Arrays in eine Liste lauten wie folgt:

Methode 1: Unterstützt keine Hinzufügungen und Löschungen

Integer[] intArray1 = new Integer[2]; List<Integer> list1 = Arrays.asList(intArray1); System.out.println(list1);

Laufende Ergebnisse:

[null, null]

Methode 2: Unterstützt Hinzufügungen und Löschungen

Integer[] intArray2 = new Integer[2]; List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(intArray2)) ; list2.add(2); System.out.println(list2);

Ausführungsergebnisse:

[null, null, 2]

Methode 3: unterstützt Hinzufügungen und Löschungen und ist am effizientesten für große Datenmengen

Integer[] intArray3 = new Integer[2]; List<Integer> list3 = new ArrayList<Integer>(intArray3.length); Collections.addAll(list3, intArray3); list3.add(3); System.out.println(list3);

Ausführungsergebnisse:

[null, null, 3]

Zusammenfassend: Ganzzahliges Integer[]-Array zur Liste

Einfache Punkte, um Fehler zu machen: Mögliche Fehler können wie folgt sein. Konvertiert:

int[] intArray1 = new int[2]; List<Integer> list1 = Arrays.asList(intArray1);//此处报错!!!

Fehlerursache: Die Typen auf beiden Seiten des Gleichheitszeichens sind inkonsistent und die Kompilierung schlägt natürlich fehl. Siehe unten für die Analyse.

Sollten Sie also beim Deklarieren eines Arrays int[] oder Integer[] verwenden, welche Deklarationsmethode kann es korrekt in eine Liste konvertieren?

Antwort: Sie können nur Integer[] zum Konvertieren einer Liste verwenden

Der Grund wird als analysiert Folgendes:

Wir Schauen wir uns die Definition von List im Java-Quellcode an (haben Sie keine Angst, dass Sie den Quellcode nicht verstehen können, schauen Sie sich meine Analyse an, sie ist sehr leicht zu verstehen):

public interface List<E> extends Collection<E> {省略&hellip;}

Lasst uns Schauen Sie sich die Definition von Arrays.asList() im Java-Quellcode an:

public static List asList(T... a) {     return new ArrayList<>(a); }
  • Wie Sie dem obigen Quellcode entnehmen können, müssen Sie beim Deklarieren von List ein generisches übergeben

  • Was ist ein Referenztyp? Integer ist ein Referenztyp. Welcher Typ ist also Int? ein Basisdatentyp, kein Referenztyp. Aus diesem Grund gibt es in Java keine Liste.

  • Wenden Sie ein Beispiel auf andere Fälle an: Die anderen 8 Basisdatentypen Byte, Short, Int, Long, Float, Double und Char sind keine Referenztypen, also die 8 Basisdaten Arten können nicht als Form von List-Ginseng verwendet werden. Aber String, Array, Klasse und Schnittstelle sind Referenztypen und können als formale Parameter von List verwendet werden, sodass List existiert

Mit den oben genannten Grundkenntnissen schauen wir uns an, warum die zweite Zeile der folgenden beiden Codezeilen dies kann kompiliert und übergeben werden, aber der Kompilierungsfehler wird gemeldet? Typ muss Liste sein. Die dritte Zeile Es wird ein Fehler gemeldet, da die Typen auf beiden Seiten des Gleichheitszeichens inkonsistent sind. Die linke Seite: Liste

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie ein Array in eine Liste in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen