Eu tenho uma matriz que é inicializada como:
Element[] array = {new Element(1), new Element(2), new Element(3)};
Eu gostaria de converter esse array em um objeto da ArrayList
classe.
ArrayList<Element> arraylist = ???;
java
arrays
arraylist
type-conversion
Ron Tuffin
fonte
fonte
ArrayList
. O Cartaz pediu especificamente por isso.Respostas:
fonte
new ArrayList
chamada também é desnecessária.List<ClassName> list = Arrays.asList(array)
Arrays.asList(array)
sem passá-lo para um novoArrayList
objeto fixará o tamanho da lista. Um dos motivos mais comuns para usar umArrayList
é poder alterar dinamicamente seu tamanho, e sua sugestão evitaria isso.Dado:
A resposta mais simples é:
Isso vai funcionar bem. Mas algumas advertências:
ArrayList
. Caso contrário, você receberá umUnsupportedOperationException
.asList()
é apoiada pela matriz original. Se você modificar a matriz original, a lista também será modificada. Isso pode ser surpreendente.fonte
java.util.ArrayList
. Arrays.asList realmente retorna umjava.util.Arrays.ArrayList
que não éinstanceof
a outra classe. Portanto, uma terceira ressalva é que, se você tentar usá-lo em um contexto exigindo o descrito acima, não funcionará.(thread antigo, mas apenas 2 centavos, como nenhum menciona Goiaba ou outras bibliotecas e alguns outros detalhes)
Se puder, use goiaba
Vale ressaltar o caminho da goiaba, que simplifica bastante essas travessuras:
Uso
Para uma lista imutável
Use a
ImmutableList
classe e seus métodosof()
ecopyOf()
factory (os elementos não podem ser nulos) :Para uma lista mutável
Use a
Lists
classe e seusnewArrayList()
métodos de fábrica:Observe também os métodos semelhantes para outras estruturas de dados em outras classes, por exemplo em
Sets
.Por que goiaba?
A principal atração poderia ser reduzir a desordem devido aos genéricos para a segurança do tipo, como o uso dos métodos da fábrica de goiaba permite que os tipos sejam inferidos na maioria das vezes. No entanto, esse argumento retém menos água desde que o Java 7 chegou com o novo operador de diamantes.
Mas esse não é o único motivo (e o Java 7 ainda não está em todo lugar): a sintaxe abreviada também é muito útil e os inicializadores de métodos, como visto acima, permitem escrever um código mais expressivo. Você faz em uma chamada Guava o que leva 2 com as coleções Java atuais.
Se você não pode ...
Para uma lista imutável
Use a
Arrays
classe do JDK e seuasList()
método de fábrica, envolvido porCollections.unmodifiableList()
:Observe que o tipo retornado para
asList()
éList
usando umaArrayList
implementação concreta , mas NÃO éjava.util.ArrayList
. É um tipo interno, que emula um,ArrayList
mas na verdade faz referência direta à matriz passada e a faz "escrever" (as modificações são refletidas na matriz).Ele proíbe modificações através de alguns dos
List
métodos da API, simplesmente estendendo umAbstractList
(portanto, adicionar ou remover elementos não é suportado), mas permite que as chamadasset()
substituam elementos. Portanto, esta lista não é verdadeiramente imutável e uma chamada aasList()
ser cumpridaCollections.unmodifiableList()
.Veja o próximo passo se precisar de uma lista mutável.
Para uma lista mutável
O mesmo que acima, mas envolvido com um real
java.util.ArrayList
:Para fins educacionais: o bom e velho caminho manual
fonte
List
retorno deArrays.asList
é mutável, pois você ainda podeset
elementos - ele não é redimensionável. Para listas imutáveis sem goiaba, você pode mencionarCollections.unmodifiableList
.arrayToList
para Java 1.5+ está incorreto. Você está instanciando listasString
e tentando recuperar seqüências de caracteres da matriz especificada, em vez de usar o tipo de parâmetro genéricoT
. Fora isso, boa resposta e +1 por ser o único, incluindo a maneira manual.O(1)
, mas para a imutabilidade você precisa fazer uma cópia, por exemplo, porCollections.unmodifiableList(new ArrayList<>(Arrays.asList(array)))
.Como essa pergunta é bastante antiga, me surpreende que ninguém tenha sugerido a forma mais simples ainda:
No Java 5,
Arrays.asList()
assume um parâmetro varargs e você não precisa construir a matriz explicitamente.fonte
List<String> a = Arrays.asList("first","second","third")
Verifique se
myArray
é do mesmo tipo queT
. Você receberá um erro do compilador se tentar criar umList<Integer>
de uma matriz deint
, por exemplo.fonte
Outra maneira (embora essencialmente equivalente à
new ArrayList(Arrays.asList(array))
solução em termos de desempenho:fonte
Java 9
No Java 9 , você pode usar o
List.of
método estático de fábrica para criar umList
literal. Algo como o seguinte:Isso retornaria uma lista imutável contendo três elementos. Se você deseja uma lista mutável , passe essa lista para o
ArrayList
construtor:JEP 269: Métodos de Fábrica de Conveniência para Coleções
O JEP 269 fornece alguns métodos de fábrica convenientes para a API Java Collections . Estes métodos de fábrica estáticos imutáveis são incorporados nos
List
,Set
eMap
interfaces em Java 9 e posterior.fonte
Você provavelmente só precisa de uma lista, não de um ArrayList. Nesse caso, você pode apenas fazer:
fonte
set
método), não pode alterar o tamanho da lista (nãoadd
ouremove
elementos)!Outra atualização, que termina quase o ano de 2014, também pode ser feita com o Java 8:
Alguns caracteres seriam salvos, se isso fosse apenas um
List
fonte
Collectors.toList()
na verdade retorna umArrayList
.Se você usar :
você pode criar e preencher duas listas! Preencher duas vezes uma lista grande é exatamente o que você não quer fazer, porque criará outra
Object[]
matriz sempre que a capacidade precisar ser ampliada.Felizmente, a implementação do JDK é rápida e
Arrays.asList(a[])
muito bem-feita. Ele cria um tipo de ArrayList chamado Arrays.ArrayList onde os dados do Object [] apontam diretamente para a matriz.O lado perigoso é que, se você alterar a matriz inicial, altera a Lista!Tem certeza de que quer isso? Talvez sim talvez não.
Caso contrário, a maneira mais compreensível é fazer isso:
Ou, como disse @glglgl, você pode criar outra ArrayList independente com:
Gosto de usar
Collections
,Arrays
ou goiaba. Mas se não se encaixar, ou você não sentir, basta escrever outra linha deselegante.fonte
new ArrayList<T>(Arrays.asList(myArray));
parte que você desencoraja a usar. Ambos fazem a mesma coisa e têm a mesma complexidade.new ArrayList<T>(Arrays.asList(myArray));
faz o mesmo, ele copia oasList
a umArrayList
...Em
Java 9
você pode usar:fonte
De acordo com a pergunta, a resposta usando o java 1.7 é:
No entanto, é melhor sempre usar a interface:
fonte
fonte
Você pode converter usando métodos diferentes
List<Element> list = Arrays.asList(array);
List<Element> list = new ArrayList();
Collections.addAll(list, array);
Arraylist list = new Arraylist();
list.addAll(Arrays.asList(array));
Para obter mais detalhes, consulte http://javarevisited.blogspot.in/2011/06/converting-array-to-arraylist-in-java.html
fonte
como já foi dito, isso fará isso
e a maneira mais nova e comum de criar array é observableArrays
ObservableList: uma lista que permite que os ouvintes acompanhem as alterações quando elas ocorrem.
para Java SE, você pode tentar
isso é de acordo com o Oracle Docs
Atualizar Java 9
também no Java 9 é um pouco fácil:
fonte
Desde o Java 8, há uma maneira mais fácil de transformar:
fonte
Você também pode fazê-lo com fluxo no Java 8.
fonte
Collectors.toList()
retornará umArrayList
. No entanto, isso pode diferir em versões futuras no java. Se você deseja um tipo específico de coleção, use-o emCollectors.toCollection()
vez de especificar o tipo exato de coleção que deseja criar.Se virmos a definição de
Arrays.asList()
método, você obterá algo como isto:Portanto, você pode inicializar
arraylist
assim:Também pode haver outra resposta para essa pergunta.
Se você
java.util.Collections.addAll()
vir uma declaração para o método, obterá algo como isto:Portanto, esse código também é útil para fazer isso
fonte
Outra maneira simples é adicionar todos os elementos da matriz a um novo ArrayList usando um loop for-each.
fonte
Se a matriz for de um tipo primitivo, as respostas fornecidas não funcionarão. Mas desde o Java 8 você pode usar:
fonte
char
array.Você pode fazer isso no java 8 da seguinte maneira
fonte
ArrayList<String> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));
Podemos facilmente converter uma matriz para
ArrayList
. Usamos oaddAll()
método da interface Collection para copiar conteúdo de uma lista para outra.fonte
ArrayList
construtores de s aceita um? extends Collection<T>
argumento, tornando a chamadaaddAll
redundante.Mesmo que haja muitas respostas perfeitamente escritas para essa pergunta, acrescentarei minhas informações.
Diga que você tem
Element[] array = { new Element(1), new Element(2), new Element(3) };
Nova ArrayList pode ser criada das seguintes maneiras
E eles suportam muito bem todas as operações do ArrayList
Mas as operações a seguir retornam apenas uma exibição em lista de um ArrayList e não um ArrayList real.
Portanto, eles darão erro ao tentar fazer algumas operações ArrayList
Mais sobre Listar representação do link da matriz .
fonte
A maneira mais simples de fazer isso é adicionando o código a seguir. Experimentado e testado.
fonte
Output is ...
Hello
world
fonte
Use o código a seguir para converter uma matriz de elementos em um ArrayList.
fonte
Todos já forneceram uma resposta boa o suficiente para o seu problema. Agora, a partir de todas as sugestões, você precisa decidir qual será o seu requisito. Existem dois tipos de coleção que você precisa conhecer. Uma é a coleção não modificada e outra é a coleção que permitirá modificar o objeto posteriormente.
Então, aqui vou dar um breve exemplo para dois casos de uso.
Criação imutável de coleção :: Quando você não deseja modificar o objeto de coleção após a criação
List<Element> elementList = Arrays.asList(array)
Criação de coleção mutável :: Quando você pode modificar o objeto de coleção criado após a criação.
List<Element> elementList = new ArrayList<Element>(Arrays.asList(array));
fonte
List
retorno deArrays.asList
é apenas um invólucro sobre a matriz original e permite que itens individuais sejam acessados e modificados viaget
eset
. Provavelmente, você deve esclarecer que quer dizer "não adicionar ou remover elementos" em vez de "imutável", o que significa que não muda nada.Matriz de objeto fornecido:
Converter matriz em lista:
Conversão Array para ArrayList
Converter matriz em LinkedList
Imprimir lista:
RESULTADO
1
2
3
fonte
A classe Arrays do Java 8 fornece um método stream () que possui versões sobrecarregadas, aceitando matrizes primitivas e matrizes de objetos.
fonte
O código abaixo parece uma boa maneira de fazer isso.
fonte