java.util Zusammenfassung 4 (Arrays, List, ListIterator)

Diesmal:

--Arrays Klasse --Liste Schnittstelle --ListIterator-Schnittstelle

Arrays Klasse

Diese Klasse ist eine Klasse, mit der Sie Arrays auf verschiedene Arten bearbeiten können. Das Merkmal dieser Klasse ist, dass alle Methoden statisch sind. Wenn Sie also die Methoden der Arrays-Klasse verwenden, müssen Sie unbedingt Arrays hinzufügen. (Beispiel: "Arrays.asList (...)", später beschrieben. Muss verwendet werden, es sei denn (wie Arrays.addAll (...) `).

asList-Methode

Eine in dieser Klasse definierte Methode (Arrays-Klasse), die ein Array in eine ** Liste mit fester Länge ** konvertiert.

Zum Beispiel mit einem einfachen Code

AsListSample1.java


import java.util.Arrays;
import java.util.List;

public class AsListSample1 {
	
	public static void main(String[] args){
		String[] strs = {"a","b","c"};
		
		List<String> list = Arrays.asList(strs);
		System.out.println(list);
	}
}

Wenn Sie ausführen

[a, b, c]

Und das Ergebnis kommt heraus. Beachten Sie jedoch, dass der folgende Code eine Ausnahme zurückgibt.

AsListSample2.java


import java.util.Arrays;
import java.util.List;

public class AsListSample2 {
	
	public static void main(String[] args){
		String[] strs = {"a","b","c"};
		
		List<String> list = Arrays.asList(strs);
		list.add("d");
		
		System.out.println(list);
	}
}
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.test.java.util.AsListSample2.main(AsListSample2.java:12)

Dies liegt daran, dass die asList-Methode ** als Liste mit fester Länge ** zurückgibt, wie ich zuvor geschrieben habe. Die Konvertierung in einen Listentyp bedeutet also nicht, dass die Länge variabel ist, sondern dass sich die Länge der Liste ändert. Dann wird eine Ausnahme ausgelöst. Daher ist es nach der Konvertierung in den Listentyp nicht möglich, etwas hinzuzufügen oder zu entfernen.

Selbst wenn Sie dies alleine verwenden, werden Sie nicht so viel Lust haben, es zu verwenden. Die Lösung besteht jedoch darin, es im Voraus als ** variable Länge mit dem folgenden Code an die Liste zurückzugeben.

AsListSample3.java


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class AsListSample3 {
	
	public static void main(String[] args){
		String[] strs = {"a","b","c"};
		
		List<String> list = new ArrayList<String>(Arrays.asList(strs));
		list.add("d");
		
		System.out.println(list);
	}
}

Dann

[a, b, c, d]

Es wird zurückgegeben, ohne eine Ausnahme ordnungsgemäß auszulösen. Übrigens, obwohl primitive Typen wie Zahlen keine Ausnahmen auslösen, können sie nicht in Listen usw. verwendet werden (Es gibt eine Methode). Seien Sie also vorsichtig.

copyOf-Methode

Eine in dieser Klasse definierte Methode, die ein angegebenes Array bis zur angegebenen Länge in ein anderes Array kopiert. Zu diesem Zeitpunkt kann die Länge des Kopierzielarrays geändert werden.

Im ersten Argument können Sie den Array-Typ boolean, byte, char, double, float, int, long, short als Array angeben, in das Sie das Objekt kopieren möchten, und im zweiten Argument können Sie die Länge des Kopierziel-Arrays angeben. .. Nur der Array-Typ des Objekts hat ein drittes Argument, und eine Klasse (Unterklasse), die den Kopierzielklassentyp (Superklasse) erbt, kann als neuer Klassenarraytyp angegeben und angegeben werden.

Es ist ein einfaches Beispiel:

CopyOfSample.java


import java.util.Arrays;

public class CopyOfSample {
	
	public static void main(String[] args){
		String[] strs = {"a","b","c"};
		String[] copyStrshort = Arrays.copyOf(strs,2);
		String[] copyStrs = Arrays.copyOf(strs,6);
		
		for(int i = 0; i < copyStrs.length; i++){
			
			if(copyStrshort.length > i){
				System.out.println("Vom Array copyStrshort" + i + "Der zweite ist →" + strs[i]);
			}
			
			System.out.println("Vom Array copyStrs" + i + "Der zweite ist →" + copyStrs[i]);
		}
	}
}

Das Ausführungsergebnis ist

Das 0te des Arrays copyStrshort ist → a
Das 0te des Arrays copyStrs ist → a
Die erste der Sequenz copyStrshort ist → b
Die erste der Sequenzen copyStrs ist → b
Die zweite der Sequenzen copyStrs ist → c
Das dritte Array des Arrays copyStrs ist → null
Das vierte Array Array copyStrs ist → null
Das fünfte Array des Arrays copyStrs ist → null

Wird sein.

Hier, Das von der copyOf-Methode kopierte Array wird automatisch verarbeitet, auch wenn das Kopierzielarray länger als das Kopierquellarray oder kürzer als das ursprüngliche Array ist. Wenn es kurz ist, können Elemente bis zur angegebenen Länge in das Kopierzielarray eingefügt werden. Wenn das Kopierzielarray länger als das ursprüngliche Array ist, wird der Anfangswert dieses Typs automatisch in jedes der verbleibenden Elementteile eingegeben.

Derzeit werden automatisch folgende Anfangswerte eingegeben:

Schimmel Wert, der in das überschüssige Element passt
boolean false
byte 0
char '\u000'
double 0.0 (0d)
float 0.0 (0f)
int 0
long 0 (0L)
short 0
Objekt null

Listenschnittstelle

Die vertraute Liste mit List <> list = new ArrayList <> (). Das Schreiben auf diese Weise erfolgt mit der Absicht, ihm danach eine Art Erweiterbarkeit zu geben (z. B. wenn Sie eine Methode verwenden möchten, die nur im Listentyp verfügbar ist), oder sie wird lesbarer. Wenn Sie es jedoch in dem Sinne verwenden, dass es danach nicht mehr erweiterbar ist, ist es nicht gut, es zu einem Listentyp zu machen. Die Klassen, die diese Schnittstelle implementieren (ArrayList, LinkedList usw.), werden im Allgemeinen in dieser List-Schnittstelle definiert.

Methode hinzufügen, Methode addAll

In der Collection-Schnittstelle definierte Methoden. Eine Methode zum Hinzufügen eines Elements zu einer Liste. Die addAll-Methode ist eine Methode, mit der die angegebene Auflistung vollständig zur Liste hinzugefügt wird. Es ist auch möglich, die Position anzugeben, an der das Element am Anfang innerhalb des Bereichs eingefügt werden soll, der den Index der Liste im ersten Argument nicht überschreitet.

Ein Beispiel für das Hinzufügen eines neuen Elements, nachdem alle Elemente des Arrays in die Liste aufgenommen wurden.

ListSample.java


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListSample {

	public static void main(String[] args) {
		String[] strs = {"a","b","c"};
		List<String> list = new ArrayList<String>();
		
		list.addAll(Arrays.asList(strs));
		
		System.out.println("First add " + list);
		
		list.add("d");
		list.add(2,"h");
		
		System.out.println("Second add " + list);
	}
}

Ergebnis ist

First add [a, b, c]
Second add [a, b, h, c, d]

toArray-Methode

In der Collection-Schnittstelle definierte Methoden. Eine Methode zum Konvertieren einer Liste in ein Array. asList-Methode So etwas wie die entgegengesetzte Methode. Sie können den Array-Typ angeben, den Sie im Argument zurückgeben möchten.

Als Fortsetzung des Codes im vorherigen Beispiel

ListSample.Java (Fortsetzung)


System.out.println("Als Objekt konvertieren: ");
		
for(Object item : list.toArray()){
	System.out.println(item);
}
		
System.out.println();
System.out.println("Als String konvertieren: ");
	
for(String item : list.toArray(new String[list.size()])){
	System.out.println(item);
}

Ergebnis ist

Als Objekt konvertieren: 
a
b
h
c
d

Als String konvertieren: 
a
b
h
c
d

Das erste Beispiel ist ein einfaches und einfaches Beispiel, und das zweite Beispiel ist ein Beispiel für die Übergabe als Zeichenfolgentyp, obwohl die Anzahl der Zeichen etwas groß ist, da es unangenehm war, die Liste zu löschen, die ein Element von String als Objekt enthält.

listIterator-Methode

Eine Methode, die einen Listentyp als ListIterator-Typ zurückgibt (später beschrieben). Wenn ein Argument angegeben wird (Indexnummer), wird das angegebene Argument zuerst als Index in der nächsten Methode vom Typ ListIterator aufgerufen.

ListIterator-Schnittstelle

Eine Schnittstelle, die einen Iterator für Listen bereitstellt. Hat kein aktuelles Element. Aus diesem Grund ist es möglich, nicht nur aus der vorderen Richtung, sondern auch aus der umgekehrten Richtung zu suchen.

hasNext, nextIndex, nächste Methode

Anders als die nextIndex-Methode ist sie in der Iterator-Schnittstelle definiert, und die nextIndex-Methode ist in dieser Schnittstelle definiert.

Die hasNext-Methode ist eine Methode, die true zurückgibt, wenn der nächste Index ein Element enthält. Die nextIndex-Methode ist eine Methode, die den Index des Elements zurückgibt, das beim Aufruf der nächsten Methode zurückgegeben wird. Die nächste Methode gibt das nächste Element zurück und bewegt den Cursor weiter nach vorne.

Als einfaches Beispiel

ListIteratorSample.java


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorSample {

	public static void main(String[] args) {
		String[] strs = {"a","b","c","d"};
		List<String> list = new ArrayList<String>(Arrays.asList(strs));
		ListIterator<String> listIterator = list.listIterator();
		
		while(listIterator.hasNext()){
			System.out.println("Index" + listIterator.nextIndex() + "Das Element von" + listIterator.next());
		}
	}
}

Ergebnis ist

Das Element mit dem Index 0 ist a
Das Element bei Index 1 ist b
Das Element von Index 2 ist c
Das Element von Index 3 ist d

Ende

Ich habe geschrieben, dass die ListIterator-Oberfläche die umgekehrte Suche ermöglicht, aber das ist eine weitere Möglichkeit ...

Recommended Posts

java.util Zusammenfassung 4 (Arrays, List, ListIterator)
java.util Zusammenfassung 3 (HashTable, Aufzählung)