java.util Résumé 4 (tableaux, liste, ListIterator)

Cette fois:

--Classe Arrays

Classe Arrays

Cette classe est une classe qui vous permet de manipuler des tableaux de différentes manières. La caractéristique de cette classe est que toutes les méthodes sont statiques, donc lorsque vous utilisez les méthodes de la classe Arrays, assurez-vous d'ajouter des tableaux (par exemple, ʻArrays.asList (...) , décrit plus tard. Doit être utilisé sauf si (comme Arrays.addAll (...) `).

méthode asList

Une méthode définie dans cette classe (classe Arrays) qui convertit un tableau en une ** liste de longueur fixe **.

Par exemple, avec un code simple

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

Lorsque vous exécutez

[a, b, c]

Et le résultat sort. Cependant, notez que le code suivant renverra une exception.

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)

En effet, la méthode asList renvoie ** comme une liste de longueur fixe ** comme je l'ai écrit précédemment, donc la conversion en un type List ne signifie pas que la longueur sera variable, mais que la longueur de la liste changera. Ensuite, une exception est levée. Par conséquent, après la conversion en type Liste, il n'est pas possible d'ajouter ou de supprimer.

Cependant, même si vous l'utilisez seul, vous n'aurez pas autant envie de l'utiliser, mais la solution est de le renvoyer dans la liste en tant que ** longueur variable à l'avance avec le code suivant.

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

Puis

[a, b, c, d]

Il revient sans lancer d'exception correctement. En passant, bien que les types primitifs tels que les nombres ne lèvent pas d'exceptions, ils ne peuvent pas être utilisés dans les listes, etc. (Il existe une méthode), alors soyez prudent.

CopyOf, méthode

Une méthode définie dans cette classe qui copie un tableau spécifié dans un autre tableau jusqu'à la longueur spécifiée. À ce moment, la longueur du tableau de destination de la copie peut être modifiée.

Dans le premier argument, vous pouvez spécifier le type de tableau boolean, byte, char, double, float, int, long, short, comme tableau dans lequel vous souhaitez copier l'objet, et dans le deuxième argument, vous pouvez spécifier la longueur du tableau de destination de la copie. .. Seul le type de tableau de l'objet a un troisième argument, et une classe (sous-classe) qui hérite du type de classe de destination de copie (super-classe) peut être spécifiée et spécifiée en tant que nouveau type de tableau de classe.

C’est un exemple simple,

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("Du tableau copyStrshort" + i + "Le second est →" + strs[i]);
			}
			
			System.out.println("De la séquence copyStrs" + i + "Le second est →" + copyStrs[i]);
		}
	}
}

Le résultat de l'exécution est

Le 0ème du tableau copyStrshort est → a
Le 0ème du tableau copyStrs est → a
Le premier de la séquence copyStrshort est → b
Le premier de la séquence copyStrs est → b
Le deuxième de la séquence copyStrs est → c
Le troisième du tableau copyStrs est → null
Le quatrième du tableau copyStrs est → null
Le cinquième du tableau copyStrs est → null

Sera.

ici, Le tableau copié par la méthode copyOf est automatiquement traité même si le tableau de destination de la copie est plus long que le tableau source de la copie ou plus court que le tableau d'origine. S'il est court, les éléments jusqu'à la longueur spécifiée peuvent être placés dans le tableau de destination de la copie. Si le tableau de destination de la copie est plus long que le tableau d'origine, la valeur initiale de ce type est automatiquement entrée dans chacune des parties d'élément restantes.

Pour le moment, les valeurs initiales saisies automatiquement sont les suivantes:

Moule Valeur qui s'inscrit dans l'élément excédentaire
boolean false
byte 0
char '\u000'
double 0.0 (0d)
float 0.0 (0f)
int 0
long 0 (0L)
short 0
objet null

Interface de liste

La liste familière avec List <> list = new ArrayList <> (). L'écriture de cette manière est faite avec l'intention de lui donner une sorte d'extensibilité après cela (par exemple, lorsque vous souhaitez utiliser une méthode qui n'est disponible que dans le type List), ou cela la rend plus lisible. Cependant, si vous l'utilisez dans le sens où il ne sera plus extensible après cela, il n'est pas bon d'en faire un type List. Les classes qui implémentent cette interface (ArrayList, LinkedList, etc.) sont généralement définies dans cette interface List.

méthode add, méthode addAll

Méthodes définies dans l'interface Collection. Une méthode pour ajouter un élément à une liste. La méthode addAll est une méthode qui ajoute la collection spécifiée à la liste dans son intégralité. Il est également possible de spécifier la position pour insérer l'élément au début dans la plage qui ne dépasse pas l'index de la liste dans le premier argument.

Un exemple d'ajout d'un nouvel élément après avoir mis tous les éléments du tableau dans la liste,

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

Le résultat est

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

Méthode toArray

Méthodes définies dans l'interface Collection. Une méthode pour convertir une liste en tableau. Méthode asList Quelque chose comme la méthode opposée. Vous pouvez spécifier le type de tableau que vous souhaitez renvoyer dans l'argument.

Comme suite du code de l'exemple précédent

ListSample.java (suite)


System.out.println("Convertir en objet: ");
		
for(Object item : list.toArray()){
	System.out.println(item);
}
		
System.out.println();
System.out.println("Convertir en chaîne: ");
	
for(String item : list.toArray(new String[list.size()])){
	System.out.println(item);
}

Le résultat est

Convertir en objet: 
a
b
h
c
d

Convertir en chaîne: 
a
b
h
c
d

Le premier exemple est un exemple simple et simple, et le deuxième exemple est un exemple de passage en tant que type String, bien que le nombre de caractères soit un peu grand car il était désagréable de sortir la liste qui a comme élément String en tant qu'objet.

méthode listIterator

Méthode qui renvoie un type List en tant que type ListIterator (décrit plus loin). Si un argument est spécifié (numéro d'index), l'argument spécifié sera d'abord appelé en tant qu'index dans la méthode suivante de type ListIterator.

Interface ListIterator

Une interface qui fournit un itérateur pour les listes. N'a pas d'élément actuel. En profitant de cela, il est possible de rechercher non seulement à partir de la direction avant mais également à partir de la direction inverse.

hasNext, nextIndex, méthode suivante

Autre que la méthode nextIndex, elle est définie dans l'interface Iterator et la méthode nextIndex est définie dans cette interface.

La méthode hasNext est une méthode qui renvoie true lorsqu'il y a un élément dans l'index suivant. La méthode nextIndex est une méthode qui renvoie l'index de l'élément renvoyé lorsque la méthode suivante est appelée. La méthode suivante renvoie l'élément suivant et déplace le curseur plus en avant.

À titre d'exemple simple

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("indice" + listIterator.nextIndex() + "L'élément de" + listIterator.next());
		}
	}
}

Le résultat est

L'élément d'index 0 est un
L'élément à l'indice 1 est b
L'élément de l'indice 2 est c
L'élément de l'indice 3 est d

fin

J'ai écrit que l'interface ListIterator permet la recherche inversée, mais c'est une autre opportunité ...

Recommended Posts

java.util Résumé 4 (tableaux, liste, ListIterator)
java.util Summary 3 (HashTable, énumération)