Mange nybegynnere blander sammen konseptet Arrays.asList() -metoden med datastrukturen ArrayList. Selv om de kan se ut og høres like ut, er disse to helt forskjellige når det kommer til implementering. I dette innlegget vil vi dekke den grunnleggende bruken av Arrays.asList()- metoden og vil fjerne noen rådende forvirringer knyttet til den.
Hvorfor brukes Arrays.asList()?
Hvis du har en Array som du må gjøre om til en liste, gir java.util.Arrays en wrapper Arrays.asList() for å tjene dette formålet. Med enkle ord tar denne metoden en matrise som en parameter og returnerer en liste. Store deler av Java-plattformens API ble utviklet før samlingsrammeverket ble introdusert. Så noen ganger må du kanskje oversette mellom tradisjonelle arrays og de mer moderne samlingene. Denne funksjonen fungerer som en kobling mellom samlinger og Array-baserte API-er.
Eksempel
Ta en titt 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);
}
}
Produksjon:
Liste : [Amanda, Loren, Keith] HashSet : [Keith, Loren, Amanda] // HashSet opprettholder ikke orden
Hvordan er Arrays.asList() og ArrayList forskjellige?
Når du kaller Arrays.asList() -metoden på en matrise, er ikke det returnerte objektet en ArrayList (En matriseimplementering som kan endres størrelse av List- grensesnittet). Det er et visningsobjekt med metodene get() og set() som får tilgang til den underliggende matrisen. Alle metoder som vil endre størrelsen på matrisen, for eksempel add() eller remove() av den tilknyttede iteratoren, kaster en UnsupportedOperationException . Grunnen til at java-programmet kompileres vellykket, men gir et kjøretidsunntak, er at en "liste" tilsynelatende returneres som et resultat avArrays.asList() . Der alle tilleggs-/slettingsoperasjoner er tillatt. Men siden den underliggende datastrukturen er en "matrise" som ikke kan endres størrelse , blir det derfor kastet et unntak under kjøretiden. Her er et utdrag som viser hvordan det ser ut:
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
}
}
Produksjon:
[null, null, null, null, null, null] 6 null [1, null, null, null, null, 6] Unntak 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å bruk av asList()-metoden
Fra og med Java SE 5.0 er asList() -metoden erklært å ha et variabelt antall argumenter. I stedet for å sende en matrise, kan du også sende 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);
}
}
Produksjon:
[vinter, sommer, vår, høst] [1, 3, 5, 7, 9]
GO TO FULL VERSION