Existe uma vantagem (ou muita diferença) em usar Arrays.asList (algo) sobre Collections.singletonList (algo) para criar uma lista contendo um item? O último também torna a lista retornada imutável.
java
collections
Howard Grimberg
fonte
fonte
ImmutableList.of()
eLists.newArrayList()
na mistura também.Respostas:
Collections.singletonList(something)
é imutável, enquanto queArrays.asList(something)
é umaList
representação de tamanho fixo de uma matriz na qual a lista e a matriz são unidas no heap.Arrays.asList(something)
permite alterações não estruturais feitas a ele, que são refletidas na lista e na matriz conjunta. Ele lançaUnsupportedOperationException
para adicionar e remover elementos, embora você possa definir um elemento para um índice específico.Quaisquer alterações feitas na lista retornadas por
Collections.singletonList(something)
resultarão emUnsupportedOperationException
.Além disso, a capacidade da lista retornada por
Collections.singletonList(something)
sempre será 1, diferentemente deArrays.asList(something)
cuja capacidade será o tamanho da matriz apoiada.fonte
Eu apenas acrescentaria que a lista singleton não é apoiada por uma matriz e apenas tem uma referência a esse item. Presumivelmente, seria necessário menos memória e pode ser significativo, dependendo do número de listas que você deseja criar.
fonte
O método
Arrays.asList
retorna uma lista de tamanho fixo apoiada pela matriz especificada. O método retorna uma instância daArrayList
qual é uma classe estática aninhada privada que se estendeAbstractList
e nãojava.util.ArrayList
. Esta classe estática fornece implementação de poucos métodos, por exemplo,set, indexOf, forEach, replaceAll
etc. etc., mas quando invocamos,add
ela não tem implementação própria, eAbstractList
é invocado o método from que lançajava.lang.UnsupportedOperationException
.O
Collections.singletonList
retorna uma lista imutável que contém apenas o objeto especificado e é serializável também.Em uma nota lateral, para listas imutáveis geralmente usamos o
Collections.unmodifiableList
que retorna uma visão não modificável da lista especificada.Uma coleção de visualizações não modificáveis é uma coleção que não pode ser modificada e também é uma visualização em uma coleção de suporte. Observe que as alterações na coleção de backup ainda podem ser possíveis e, se ocorrerem, serão visíveis na visualização inalterável.
Podemos ter uma lista imutável verdadeira no Java 10 e posterior. Existem duas maneiras de obter uma lista verdadeiramente inalterável :
var unmodifiableList = List.copyOf(srcList);
var unmodifiableList = srcList.stream().collect(Collectors.toUnmodifiableList());
Se alguma dessas duas variáveis for usada, o valor ainda será "Apple" e não "Apricot".Conforme o documento do Java 10 :
fonte