[Java] Mit Arrays.asList () zu beachtende Punkte

Einführung

Als ich lange Zeit Java verwendet habe, habe ich mich ein wenig mit Arrays.asList () beschäftigt, daher werde ich die Notizen von Arrays.asList () als Memorandum aufschreiben.

Was ist Arrays.asList ()

String[] words = {"abc","def","ghi"};
List<String> list = Arrays.asList(words);

Hinweise zu Arrays.asList ()

1. Feste Liste der Rückgabewerte

Gibt eine Liste mit fester Größe zurück, die mit dem angegebenen Array funktioniert.

Schreiben Sie in [Java API](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Arrays.html#asList-T ...-) wie oben. Es wurde getan. Dies bedeutet, dass die Länge der Liste festgelegt ist, auch wenn der Rückgabewert der asList-Methode eine Liste ist.

Wenn Sie beispielsweise versuchen, die Anzahl der Elemente mit der Methode add oder remove für den Rückgabewert der Methode asList zu ändern, tritt kein Kompilierungsfehler auf, sondern zur Laufzeit java.lang.UnsupportedOperationException. com / javase / jp / 8 / docs / api / java / lang / UnsupportedOperationException.html) wird auftreten.

Dieser Punkt wird auch in die API geschrieben. Wenn Sie die API also ordnungsgemäß überprüfen, können Sie sie problemlos löschen.

//Hinzufügen von Elementen zu einer Liste mit fester Länge
static void add() {
	List<Integer> fixedSizeList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
	//UnsupportedOperationException tritt zur Laufzeit auf.
	fixedSizeList.add(11);
}

//Elemente für Listen mit fester Länge löschen
static void remove() {
	List<Integer> fixedSizeList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
	//UnsupportedOperationException tritt zur Laufzeit auf.
	fixedSizeList.remove(5);
}

Das Problem "Die Länge der Liste ist behoben" kann vermieden werden, indem "Die von der asList-Methode im Konstruktor von ArrayList generierte Liste angeben" wie unten gezeigt festgelegt wird.

Sie können mit List # toArray () auf einmal von einer Liste in ein Array konvertieren, aber es scheint, dass die Konvertierung von einem Array in eine Liste mit variabler Länge zwangsläufig in zwei Schritten erfolgt.

// Arrays.asList()Konvertieren Sie die in Schritt 1 erstellte Liste in eine Liste mit variabler Länge (veränderbar).
static void add2() {
	List<Integer> fixedSizeList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
	List<Integer> list = new ArrayList<>(fixedSizeList);
	//Zur Laufzeit tritt kein Fehler auf.
	list.add(11);
}

2. Unerwartetes Verhalten, wenn ein primitives Array als Argument angegeben wird

Wenn Sie im Argument von Arrays.asList () ein Array vom primitiven Typ angeben, lautet der Rückgabewert nicht "List ". Wenn Sie beispielsweise int [] als Argument von Arrays.asList () angeben, lautet der Rückgabewert "List <int []>".

Dies wurde überhaupt nicht in die API geschrieben, daher befürchtete ich, dass es zunächst nicht kompiliert werden könnte, aber als Ergebnis war ich erleichtert, dass es wie angegeben funktionierte.

Es scheint, dass es eine Methode wie "Geben Sie ein Array des Wrapper-Klassentyps als Argument an" gibt, um dieses Problem zu vermeiden, aber es scheint seltsam, sich die Mühe zu machen, es in einen Wrapper-Klassentyp zu konvertieren.

static void create1() {
	//Wenn es sich um ein Referenztyp-Array handelt, wird die Referenztypliste wie erwartet zurückgegeben....
	String[] words = {"abc","def","ghi"};
	List<String> list1 = Arrays.asList(words);
}

static void create2() {
	//AsList ein Array primitiver Typen()Wenn es als Argument von verwendet wird, wird eine Liste mit 1 Element zurückgegeben, da "das Array zu einem Element in der Liste wird".
	// list2.size()Ist 1.
	int[] numbers = {1,2,3,4,5,6,7,8,9,10};
	List<int[]> list2 = Arrays.asList(numbers);
	System.out.println("Länge der Liste2:" + list2.size());
}

static void create3() {
	//Argument variabler Länge asList()Wenn Sie es an übergeben, wird die Liste wie erwartet generiert, auch wenn das Argument ein ganzzahliger Wert (= int) ist.
	// list3.size()Ist 10.
	List<Integer> list3 = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
	System.out.println("list3 Länge:" + list3.size());
}

Zusammenfassung

  1. Die von Arrays.asList () erhaltene Liste ist eine Liste mit fester Länge.
  2. Wenn im Argument von Arrays.asList () ein Array vom primitiven Typ angegeben wird, werden die Elemente des Arrays nicht erweitert und das Array selbst wird zu einem Element der Liste der Rückgabewerte.

Recommended Posts

[Java] Mit Arrays.asList () zu beachtende Punkte
Java zum Spielen mit Function
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Lernen von Java mit Progate Note 1
Java mit Ramen lernen [Teil 1]
Wagen Sie es, Kaggle mit Java herauszufordern (1)
Ich habe versucht, mit Java zu interagieren
Meine Gewinnnotiz: Einführung von Java in Ubuntu
Java, Arrays für Anfänger
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
[Hinweis] Erste Schritte mit Rspec
Einführung in Algorithmen mit Java-Suche (Tiefenprioritätssuche)
3 schwierige Punkte für Java Realm
Verwendung der Java Scanner-Klasse (Hinweis)
Einfach mit regulären Java-Ausdrücken zu stolpern
Einführung in Algorithmen mit Java --Search (Breitenprioritätssuche)
[Java] Einführung in Java
Einführung in Java
Java8 / 9-Anfänger: Streamen Sie API-Suchtpunkte und wie Sie damit umgehen
Herausforderung, mit verstümmelten Zeichen mit Java AudioSystem.getMixerInfo () umzugehen
[Java] So testen Sie, ob es in JUnit null ist
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Einführung in Algorithmen mit Java --Search (Bit Full Search)
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Verwendung des Java-Frameworks mit AWS Lambda! ??
Ich möchte Java8 für jeden mit Index verwenden
Verwendung von Segmented Control und zu notierenden Punkten
Verwendung der Java-API mit Lambda-Ausdrücken
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Versuchen Sie, TCP / IP + NIO mit JAVA zu implementieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Einfacher LINE BOT mit Java Servlet
Ich habe versucht, den Block mit Java zu brechen (1)
[Anfänger] Punkte, auf die Sie nach Java-Übungen / Vererbung / abstrakte Methode achten sollten [Anmerkung 26]
Installieren Sie Java mit Homebrew
Java abstrakter Modifikator [Hinweis]
Aufrufen von Funktionen in großen Mengen mit Java Reflection
Listenverarbeitung zum Verstehen mit Bildern --java8 stream / javaslang-
Senden Sie einen Job an AWS Batch mit Java (Eclipse)
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
[Hinweis] Wenden Sie mit NPOI einen Kennwortschutz auf Excel-Tabellen an
Installieren Sie Java mit Ansible
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
[Java] So lassen Sie die Federkonstruktorinjektion mit Lombok weg
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
[Java Silver] Zusammenfassung der Punkte im Zusammenhang mit Lambda-Ausdrücken
java: Wie schreibe ich eine generische Typliste? [Hinweis]
[Java] Stellen Sie eine Verbindung zu MySQL her
# 2 [Anmerkung] Ich habe versucht, neunundneunzig mit Java zu berechnen.
[Java] Verschlüsselung mit AES-Verschlüsselung mit Standardbibliothek
Bequemer Download mit JAVA
Einfaches Memo von JUnit of Java
[Java] Java SE 8 Silver Note
[Java] Verweisen Sie auf und setzen Sie private Variablen mit Reflektion
Schalten Sie Java mit direnv
Kotlins Verbesserungen an Java