Mange begyndere blander konceptet Arrays.asList() -metoden sammen med datastrukturen ArrayList. Selvom de kan se ud og lyde ens, er disse to helt forskellige, når det kommer til implementering. I dette indlæg vil vi dække den grundlæggende brug af Arrays.asList()- metoden og afhjælpe nogle fremherskende forvirringer relateret til den.
Hvorfor bruges Arrays.asList()?
Hvis du har et array, som du skal omdanne til en liste, giver java.util.Arrays en wrapper Arrays.asList() til at tjene dette formål. Med enkle ord tager denne metode et array som en parameter og returnerer en liste. Store dele af Java-platformens API blev udviklet, før samlingsrammen blev introduceret. Så nogle gange skal du måske oversætte mellem traditionelle arrays og de mere moderne samlinger. Denne funktion fungerer som et link mellem samlinger og Array-baserede API'er.
Eksempel
Tag et kig på følgende eksempel:
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);
}
}
Produktion:
Liste : [Amanda, Loren, Keith] HashSet : [Keith, Loren, Amanda] // HashSet opretholder ikke orden
Hvordan er Arrays.asList() og ArrayList forskellige?
Når du kalder Arrays.asList() -metoden på et array, er det returnerede objekt ikke en ArrayList (En array- implementering, der kan ændres størrelse af List- grænsefladen). Det er et visningsobjekt med get() og set() metoder, der får adgang til det underliggende array. Alle metoder, der ville ændre størrelsen af arrayet, såsom add() eller remove() af den tilknyttede iterator, kaster en UnsupportedOperationException . Grunden til, at java-programmet kompileres med succes, men giver en Runtime-undtagelse, er, at der tilsyneladende returneres en "Liste" som følge afArrays.asList() . Hvor alle tilføjelse/sletningsoperationer er tilladte. Men da den underliggende datastruktur er et "array", der ikke kan ændres størrelse , bliver der derfor kastet en undtagelse under kørselstiden. Her er et uddrag, der viser, hvordan det ser ud:
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
}
}
Produktion:
[null, null, null, null, null, null] 6 null [1, null, null, null, null, 6] Undtagelse i tråden "main" java.lang.UnsupportedOperationException på java.util.AbstractList.add(AbstractList. java:148) på java.util.AbstractList.add(AbstractList.java:108) på ArraysAsListDemo.main(ArraysAsListDemo.java:20)
Eksempler på brug af asList()-metoden
Fra Java SE 5.0 er asList() -metoden erklæret at have et variabelt antal argumenter. I stedet for at sende et array, kan du også videregive individuelle elementer. For eksempel:
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);
}
}
Produktion:
[vinter, sommer, forår, efterår] [1, 3, 5, 7, 9]
GO TO FULL VERSION