Como usar ArrayList em Java: principais métodos

Até o momento, nessa seção de Estrutura de Dados de nosso curso de Java, vimos o quão útil são os arrays e as operações que podemos fazer com esses arrays, também conhecidos por vetores.
Porém, há um grande problema neles: são estáticos. Ou seja, tem tamanho definido, não podemos adicionar nem excluir nada neles, o que é bastante incômodo e faz com que arrays em Java sejam limitados.

E por que arrays não são muito úteis?
Porque na vida real as coisas não são assim estáticas, elas mudam. O número de funcionários de um empresa tendem a crescer, em uma faculdade alunos se formam e outros se matriculam, em um jogo de RPG vamos colecionando ítens no decorrer do jogo, ao passo que vamos usando outros.

Agora, nesse tutorial do curso Java Progressivo, vamos aprender como usar os ArrayList, que são arrays mais 'flexíveis', ou dinâmicos, já que podemos adicionar ou retirar elementos, além de fazer outras coisas que não são possíveis com os Arrays.


O que são ArrayList em Java

O Java, por padrão, possui uma série de recursos prontos (APIs) para que possamos tratar de estrutura de dados, também chamados de coleções (collections).
Podemos dizer que ArrayList é uma classe para coleções. Uma classe genérica (generic classes), para ser mais exato.

Coleções mesmo, de qualquer tipo de 'coisa', desde que seja um objeto.

Você pode criar seus objetos - através de uma classe - e agrupá-los através de ArrayList e realizar, nessa coleção, várias operações, como: adicionar e retirar elementos, ordená-los, procurar por um elemento específico, apagar um elemento específico, limpar o ArrayList dentre outras possibilidades.


Como declarar e usar ArrayList em Java

Importe:
import java.util.ArrayList;
Por ser um tipo diferente, sua sintaxe é um pouco diferente do que você já viu até então:

ArrayList< Objeto > nomeDoArrayList = new ArrayList< Objeto >();

No exemplo a seguir, vamos usar um ArrayList de String para trabalhar com o nome de várias Bandas de música:
ArrayList<String> bandas = new ArrayList<String> ();


Exemplo de uso do ArrayList


Após declarar a ArrayList 'bandas' que armazenará Strings, vamos adicionar alguns nomes.
Primeiro adicionamos a banda "Rush":
bandas.add("Rush");

Existe um método do ArrayList chamado 'toArray()' que coloca todos os elementos de um ArrayList em um Array.
Ou seja: bandas.toArray() é um Array!

Porém, já vimos que existe um método 'toString' da classe Arrays que retorna uma String com os elementos de um Array. Vamos usar esse método parar exibir todos os elementos do ArrayList, que transformamos em Array através do método 'toArray()':
Arrays.toString( bandas.toArray() );

Vamos adicionar a segunda banda, "Beatles" e imprimir, usando o mesmo método.
Note que quando usamos 'add', sempre adicionamos o elemento pro fim da ArrayList.
Confirme isso agora, vendo que a banda "Iron Maiden" ficará depois de "Beatles".

Vamos pegar o primeiro elemento, o elemento '0', através do método 'get':
bandas.get(0);

Note que é a banda "Rush", pois ela foi a primeira a ser adicionada.

Vamos adicionar o "Tiririca" na posição do "Rush", ou seja, na posição '0':
bandas.add(0,"Tiririca");
ou
bandas.add( bandas.indexOf("Rush"), "Tiririca");

Pois o método 'indexOf' retorna o índice em que ocorre "Rush".

Para saber o tamanho que tem seu ArrayList, basta usar o método 'size()':
bandas.size();

Feito isso, rapidamente remova o "Tiririca", pois alguém pode ver.
Para tal, use o método 'remove':
bandas.remove("Tiririca");

Ok. Não quer mais brincar de ArrayList? Remova tudo
bandas.clear();





import java.util.ArrayList;
import java.util.Arrays;

public class arrayLists{
    
    public static void main(String[] args){
            ArrayList<String> bandas = new ArrayList<String> ();
            
            bandas.add("Rush");
            System.out.print( "Adicionando a banda Rush: " );
            System.out.println( Arrays.toString( bandas.toArray() ) );
            
            bandas.add("Beatles");
            System.out.print( "Adicionando a banda Beatles: " );
            System.out.println( Arrays.toString( bandas.toArray() ) );
            
            bandas.add("Iron Maiden");
            System.out.print( "Adicionando a banda Iron Maiden: " );
            System.out.println( Arrays.toString( bandas.toArray() ) );
            
            System.out.print( "Quem está na índice 0: " );
            System.out.println( bandas.get(0) );
            
            System.out.print( "Adicionando Tiririca onde estava o Rush: " );
            bandas.add( bandas.indexOf("Rush"), "Tiririca");
            System.out.println( Arrays.toString( bandas.toArray() ) );
            
            System.out.print( "Número de elementos na lista: " );
            System.out.println( bandas.size() );
            
            System.out.print( "Removendo o Tiririca: " );
            bandas.remove("Tiririca");
            System.out.println( Arrays.toString( bandas.toArray() ) );
            
            System.out.print( "Removendo tudo: " );
            bandas.clear();
            System.out.println( Arrays.toString( bandas.toArray() ) );
        }

}

Saída:
Adicionando a banda Rush: [Rush]
Adicionando a banda Beatles: [Rush, Beatles]
Adicionando a banda Iron Maiden: [Rush, Beatles, Iron Maiden]
Quem está na índice 0: Rush
Adicionando Tiririca onde estava o Rush: [Tiririca, Rush, Beatles, Iron Maiden]
Número de elementos na lista: 4
Removendo o Tiririca: [Rush, Beatles, Iron Maiden]
Removendo tudo: []


Para saber mais métodos e mais opções de parâmetros/argumentos, consulte a documentação sobre ArrayList em Java, no site da Oracle:
http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

Se em vez de de Strings, quiser trabalhar com números, use as classes Wrappers:
ArrayList<Integer>, ArrayList<Float>, ArrayList<Double>, ArrayList<Long> etc.

21 comentários:

  1. Obrigada, ajudou muito no meu curso!

    ResponderExcluir
  2. Tópico perfeito!
    Simples, objetivo e direto!
    Consegui implementar a população de um combobox com um objeto list em meu TCC.
    Obrigado pela ajuda! =)

    Vitor Raul Miotto

    ResponderExcluir
  3. obrigado
    muito bom,realmente me ajudou

    ResponderExcluir
  4. bem explicado,e muito obrigado por compartilha seus conhecimentos.

    ResponderExcluir
  5. Sacanagem misturar bandas como Rush, Maiden e Beatles, com Tiririca..

    ResponderExcluir
  6. Existe alguma diferença entre usar os métodos "Arrays.toString( bandas.toArray())" e usar simplesmente o "System.out.println(bandas)"
    O resultado aqui foi o mesmo, um arraylist já não é uma lista de arrays? por que usar um método pra transformar em uma coisa que ele já é? ou não é?
    Obrigado!

    ResponderExcluir
  7. Muito bom, ajudou bastante ^^
    Parabéns pelo trabalho!

    ResponderExcluir
  8. Obrigado pelo vosso site. Me tem ajudado muito, principalmente agora com os Arrays. Só quero agradeçer pelo vosso esforço. Que Deus vos abençoe sempre.

    ResponderExcluir
  9. "Coleções mesmo, de qualquer tipo de 'coisa' ou dado, não somente de tipos primitivos."
    Na verdade, não se pode inserir primitivos no ArrayList, somente objetos.

    ResponderExcluir
  10. Então acredito que é necessario usar o método toString(), quando se trata de um array de objeto.

    ResponderExcluir
  11. Aonde eu encontro como que faço conexão com o banco de dados ?

    ResponderExcluir
  12. Como se alimenta o arraylist com dados inseridos pelo usuario?

    ResponderExcluir
  13. Rezende
    ArrayListlista = new ArrayList();//criei um arraylist
    String nomes;//uma string pra receber do usuario

    Scanner s = new Scanner(System.in);
    nomes = s.nextLine();//colocando o que o usuario digitou na string
    lista.add(nomes); //PASSANDO PARA O ARRAYLIST

    ResponderExcluir
  14. Na verdade esse método é mais simples:

    ArrayListlista = new ArrayList();//criei um arraylist

    Scanner s = new Scanner(System.in);
    lista.add(s.nextLine()); /*ele recebe diretamente do usuario para o array, economizando processos e variaveis que só sera utilizada para isso(mas não tem tanta diferença, a maior diferença é que seu código fica mais simples de se entender e tambem fiva menor*/

    ResponderExcluir
  15. Geito mais simples de adicionar por entrada:

    Scanner entrada = new Scanner(System.in);
    System.out.printf("Banda a ser adicionada: ");
    bandas.add(entrada.nextLine());

    ResponderExcluir
  16. Rush foi para qual index após adicionar Tiririca?

    ResponderExcluir
  17. boa tarde! tenho uma questao nao consigo resolver. preciso de ajuda como criar um for que gera de 1 a 15?

    ResponderExcluir
  18. preciso dos seguintes arraylist, métodos e propriedades em java:

    #Mostrar lista de trabalhadores em cada categoria;
    #mostrar a idade média dos trabalhadores em cada categoria;
    #mostrar a folha de pagamento dos trabalhadores, isto é, nome, salário básico, contribuição para as peças que produziu, além de adicionais e totais para cobrar;
    #Mostre aos trabalhadores que receberam o maior bônus recebido, a fim de diminuição de mais.
    # Mostre o número de sexo de trabalhadores em cada categoria, diferenciado-os por sexo;
    #mostrar o total de peças produzidas de cada tipo na fábrica;
    #mostrar o lucro recebido por todas as peças de baixo custo fabricadas e peças de alto custo custo;
    #Mostrar o total de dinheiro que foi pago em salario pela fabrica, o dinheiro total que foi pago obtido pela venda das peças e as diferenças entre estes dois valores, isto permite a empresa determinar a rentabilidade da fábrica.


    aguiar27ag@gmail.com

    ResponderExcluir
  19. Eu removi Tiririca e adicionei Led Zeppelin. O resultado ficou mt bom. Grato pelo tutorial

    ResponderExcluir