Molti principianti confondono il concetto del metodo Arrays.asList() con la struttura dati ArrayList. Anche se possono sembrare e suonare simili, questi due sono totalmente diversi quando si tratta di implementazione. In questo post, tratteremo l'uso di base del metodo Arrays.asList() e elimineremo alcune confusioni prevalenti relative ad esso.
Perché viene utilizzato Arrays.asList()?
Se hai un Array che devi trasformare in un elenco, java.util.Arrays fornisce un wrapper Arrays.asList() per servire a questo scopo. In parole semplici, questo metodo prende un array come parametro e restituisce un elenco. Le parti principali dell'API della piattaforma Java sono state sviluppate prima dell'introduzione del framework delle raccolte. Quindi, occasionalmente, potrebbe essere necessario tradurre tra gli array tradizionali e le raccolte più moderne. Questa funzione funge da collegamento tra le raccolte e le API basate su array.
Esempio
Dai un'occhiata al seguente esempio:
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
String[] teamMembers = {"Amanda", "Loren", "Keith"};
// using aslist() method
List teamList = Arrays.asList(teamMembers);
System.out.println("List : " + teamList);
HashSet teamHashSet = new HashSet<>(Arrays.asList(teamMembers));
System.out.println("HashSet : " + teamHashSet);
}
}
Produzione:
Elenco: [Amanda, Loren, Keith] HashSet: [Keith, Loren, Amanda] // HashSet non mantiene l'ordine
In che modo Arrays.asList() e ArrayList sono diversi?
Quando si chiama il metodo Arrays.asList() su un array, l'oggetto restituito non è un ArrayList ( un'implementazione di array ridimensionabile dell'interfaccia List ). È un oggetto vista con i metodi get() e set() che accedono all'array sottostante. Tutti i metodi che modificherebbero la dimensione dell'array come add() o remove() dell'iteratore associato generano un'eccezione UnsupportedOperationException . Il motivo per cui il programma java viene compilato correttamente ma fornisce un'eccezione di runtime è che, apparentemente, viene restituito un "elenco" come risultato diArrays.asList() . Dove sono consentite tutte le operazioni di aggiunta/cancellazione. Ma poiché la struttura dei dati sottostante è un "array" non ridimensionabile , quindi viene generata un'eccezione in fase di esecuzione. Ecco uno snippet che mostra come appare:
import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
Integer[] diceRoll = new Integer[6];
//using aslist() method
List diceRollList = Arrays.asList(diceRoll);
System.out.println(diceRollList);
// using getters and setters to randomly access the list
diceRollList.set(5, 6);
diceRollList.set(0, 1);
System.out.println(diceRollList.get(5));
System.out.println(diceRollList.get(1));
System.out.println(diceRollList);
diceRollList.add(7); // Add a new Integer to the list
}
}
Produzione:
[null, null, null, null, null, null] 6 null [1, null, null, null, null, 6] Eccezione nel thread "principale" java.lang.UnsupportedOperationException in java.util.AbstractList.add(AbstractList. java:148) in java.util.AbstractList.add(AbstractList.java:108) in ArraysAsListDemo.main(ArraysAsListDemo.java:20)
Esempi per l'utilizzo del metodo asList()
A partire da Java SE 5.0, il metodo asList() viene dichiarato avere un numero variabile di argomenti. Invece di passare un array, puoi anche passare singoli elementi. Per esempio:
import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
List seasons = Arrays.asList("winter", "summer", "spring", "fall");
List odds = Arrays.asList(1, 3, 5, 7, 9);
System.out.println(seasons);
System.out.println(odds);
}
}
Produzione:
[inverno, estate, primavera, autunno] [1, 3, 5, 7, 9]
GO TO FULL VERSION