Много начинаещи смесват концепцията на метода Arrays.asList() със структурата от данни ArrayList. Въпреки че може да изглеждат и звучат подобно, тези два са напълно различни, когато става въпрос за изпълнение. В тази публикация ще разгледаме основното използване на метода Arrays.asList() и ще разсеем някои преобладаващи обърквания, свързани с него.
Защо се използва Arrays.asList()?
Ако имате масив, който трябва да превърнете в списък, тогава java.util.Arrays предоставя обвивка Arrays.asList() , която да служи за тази цел. С прости думи, този метод приема масив като параметър и връща списък. Основни части от API на Java платформата са разработени преди въвеждането на рамката за колекции. Така че понякога може да се наложи да превеждате между традиционните масиви и по-модерните колекции. Тази функция служи като връзка между колекции и базирани на масиви API.Пример
Разгледайте следния пример: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);
}
}
Изход:
Списък : [Аманда, Лорен, Кийт] HashSet : [Кийт, Лорен, Аманда] // HashSet не поддържа ред
По Howво се различават Arrays.asList() и ArrayList?
Когато извикате метода Arrays.asList() на масив, върнатият обект не е ArrayList ( Реализация на масив с възможност за преоразмеряване на интерфейс List ). Това е обект за изглед с методи get() и set() , които имат достъп до основния масив. Всички методи, които биха променor размера на масива, като add() or remove() на свързания итератор, хвърлят UnsupportedOperationException . Причината, поради която java програмата се компorра успешно, но дава изключение по време на изпълнение, е, че очевидно се връща „списък“ като резултат отArrays.asList() . Където всички операции за добавяне/изтриване са допустими. Но тъй като основната структура на данните е „масив“ без възможност за промяна на размера , следователно се хвърля изключение по време на изпълнение. Ето фрагмент, показващ How изглежда: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
}
}
Изход:
[null, null, null, null, null, null] 6 null [1, null, null, null, null, 6] Изключение в нишката "main" java.lang.UnsupportedOperationException в java.util.AbstractList.add(AbstractList. java:148) в java.util.AbstractList.add(AbstractList.java:108) в ArraysAsListDemo.main(ArraysAsListDemo.java:20)
Примери за използване на метод asList().
От Java SE 5.0 методът asList() е деклариран да има променлив брой аргументи. Вместо да предавате масив, можете също да предавате отделни елементи. Например: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);
}
}
Изход:
[зима, лято, пролет, есен] [1, 3, 5, 7, 9]