Muitos iniciantes confundem o conceito do método Arrays.asList() com a estrutura de dados ArrayList. Embora possam parecer e soar semelhantes, esses dois são totalmente diferentes quando se trata de implementação. Nesta postagem, abordaremos o uso básico do método Arrays.asList() e eliminaremos algumas confusões existentes relacionadas a ele.
Por que Arrays.asList () é usado?
Se você tiver um Array que precisa transformar em uma lista, então java.util.Arrays fornece um wrapper Arrays.asList() para atender a esse propósito. Em palavras simples, esse método usa um array como parâmetro e retorna uma lista. As principais partes da API da plataforma Java foram desenvolvidas antes da introdução da estrutura de coleções. Então, ocasionalmente, você pode precisar traduzir entre arrays tradicionais e coleções mais modernas. Esta função serve como um link entre Coleções e APIs baseadas em Array.
Exemplo
Dê uma olhada no seguinte exemplo:
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);
}
}
Saída:
List : [Amanda, Loren, Keith] HashSet : [Keith, Loren, Amanda] // HashSet não mantém a ordem
Como Arrays.asList() e ArrayList são diferentes?
Quando você chama o método Arrays.asList() em um array, o objeto retornado não é um ArrayList (uma implementação de array redimensionável da interface List ). É um objeto de visualização com os métodos get() e set() que acessam o array subjacente. Todos os métodos que alteram o tamanho da matriz, como add() ou remove() do iterador associado, geram um UnsupportedOperationException . A razão pela qual o programa java compila com sucesso, mas dá uma exceção de tempo de execução é que, aparentemente, uma “Lista” é retornada como resultado deArrays.asList() . Onde todas as operações de adição/exclusão são permitidas. Mas como a estrutura de dados subjacente é um “array” não redimensionável , uma exceção é lançada no tempo de execução. Aqui está um trecho mostrando como ele se parece:
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
}
}
Saída:
[nulo, nulo, nulo, nulo, nulo, nulo] 6 nulo [1, nulo, nulo, nulo, nulo, 6] Exceção no encadeamento "principal" java.lang.UnsupportedOperationException em java.util.AbstractList.add(AbstractList. java:148) em java.util.AbstractList.add(AbstractList.java:108) em ArraysAsListDemo.main(ArraysAsListDemo.java:20)
Exemplos para usar o método asList()
A partir do Java SE 5.0, o método asList() é declarado para ter um número variável de argumentos. Em vez de passar um array, você também pode passar elementos individuais. Por exemplo:
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);
}
}
Saída:
[inverno, verão, primavera, outono] [1, 3, 5, 7, 9]
GO TO FULL VERSION