Veel beginners verwarren het concept van de methode Arrays.asList() met de gegevensstructuur ArrayList. Hoewel ze er misschien hetzelfde uitzien en hetzelfde klinken, zijn deze twee totaal verschillend als het gaat om implementatie. In dit bericht behandelen we het basisgebruik van de methode Arrays.asList() en zullen we enkele heersende verwarringen die daarmee verband houden, oplossen.
Waarom wordt Arrays.asList() gebruikt?
Als u een Array hebt die u in een lijst moet veranderen, biedt java.util.Arrays een wrapper Arrays.asList() om dit doel te dienen. Simpel gezegd, deze methode neemt een array als parameter en retourneert een lijst. Grote delen van de Java-platform-API zijn ontwikkeld voordat het collectieraamwerk werd geïntroduceerd. Dus af en toe moet u misschien vertalen tussen traditionele arrays en de modernere collecties. Deze functie dient als koppeling tussen Collections en Array gebaseerde API's.Voorbeeld
Kijk eens naar het volgende voorbeeld:
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);
}
}
Uitgang:
Lijst: [Amanda, Loren, Keith] HashSet: [Keith, Loren, Amanda] // HashSet handhaaft de volgorde niet
Hoe verschillen Arrays.asList() en ArrayList?
Wanneer u de methode Arrays.asList() op een array aanroept , is het geretourneerde object geen ArrayList (een aanpasbare array- implementatie van de List- interface). Het is een view-object met methoden get() en set() die toegang hebben tot de onderliggende array. Alle methoden die de grootte van de array wijzigen, zoals add() of remove() van de bijbehorende iterator, genereren een UnsupportedOperationException . De reden dat het java-programma met succes compileert maar een runtime-uitzondering geeft, is dat blijkbaar een "Lijst" wordt geretourneerd als resultaat vanArrays.asList() . Waarbij alle bewerkingen voor toevoegen/verwijderen zijn toegestaan. Maar aangezien de onderliggende gegevensstructuur een niet-aanpasbare "array" is , wordt er tijdens de uitvoering een uitzondering gegenereerd. Hier is een fragment dat laat zien hoe het eruit ziet:
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
}
}
Uitgang:
[null, null, null, null, null, null] 6 null [1, null, null, null, null, 6] Uitzondering in thread "main" java.lang.UnsupportedOperationException op java.util.AbstractList.add(AbstractList. java:148) op java.util.AbstractList.add(AbstractList.java:108) op ArraysAsListDemo.main(ArraysAsListDemo.java:20)
Voorbeelden van het gebruik van de asList()-methode
Vanaf Java SE 5.0 wordt gedeclareerd dat de methode asList() een variabel aantal argumenten heeft. In plaats van een array door te geven, kunt u ook individuele elementen doorgeven. Bijvoorbeeld:
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);
}
}
Uitgang:
[winter, zomer, lente, herfst] [1, 3, 5, 7, 9]
GO TO FULL VERSION