Array X Arraylist
Ao iniciar os estudos em estruturas de dados, nos deparamos com arrays e arrays list. A princípio, podem parecer ser a mesma coisa, mas existem algumas diferenças que devem ser levadas em consideração na hora da escolha da melhor estrutura para determinada situação. Vejamos algumas delas:
Inicialização
- Arrays possuem um tamanho definido que deve ser informado no momento da inicialização. Uma vez informado, esse valor não pode ser alterado, podendo ser informado de duas formas:
a) Definindo o tamanho numeralmente: String[] array= new String[5];
b) Definindo os valores: String[] fruits = {"Strawberry", "Peaches", "Cherries", "Grapes"};
- Já em um arraylist não há necessidade de informar o tamanho da lista, uma vez que ela cresce e encolhe automaticamente. Também é possível informar os elementos no momento da criação:
a) ArrayList<String> cars = new ArrayList<>();
b) ArrayList<String> movies = new ArrayList<>(Arrays.asList("Jurassic Park", "The dark knight", "Avangers", "Interstellar"));
Dados
- Arrays podem armazenar tanto tipos primitivos quanto objetos / classes:
a) int[] numbers = new int[5];
b) Integer[] numbers = new Integer[5];
- Arrays list armazenam apenas classes e objetos, não sendo possível armazenar dados primitivos:
a) ArrayList<String> cars = new ArrayList<>();
b) ArrayList<int> numbers = new ArrayList<>(); // Incorreto
Adição de elementos
- Em um array, um elemento é adicionado quando especificamos sua posição e informamos o valor, sendo bem parecido com uma variável:
a) numbers[0] = 5;
b) numbers[1] = 10;
- Já no arraylist, existem algumas formas de fazê-lo: podemos adicionar o item no final da lista ao chamar o método 'add()' informado o valor. Podemos também chamar uma sobrecarga do método (add(x, y)) informando no primeiro parâmetro a posição do elemento, e no segundo o elemento em si. Podemos ainda chamar outra sobrecarga desse mesmo método (add(collection)), dessa vez, passando toda uma coleção:
a) movies.add("Star wars");
b) movies.add(1, "The Lord of the Rings"); // o objeto que estava nessa posição será empurrado para o próxima
c) movies.add(collection);
Obtenção de elementos
- Para obter um dado em um array, precisamos especificar sua posição:
System.out.println(fruits[1]); // 'Peaches'
- Em um arraylist, usamos o método 'get(x)', informando sua posição. Podemos ainda utilizar o método 'getFisrt()' e 'getLast()' para obtermos, respectivamente, o primeiro e último elementos:
a) System.out.println(movies.get(1)); // The Lord of the Rings
b) System.out.println(movies.getFirst()); // Jurassic Park
c) System.out.println(movies.getLast()); // Star wars
Tamanho
- 'length' é uma propriedade do array que tem a função de retornar seu tamanho:
- No arraylist, utilizamos o método 'size()':
Substituindo valores
- Vamos simplesmente informar a posição e o seu novo valor quando trabalhamos com array:
fruits[3] = "Mango"; // O outro elemento (grapes) será descartado
- Com o arraylist, temos o método 'set(param1, param2)', onde o primeiro parâmetro representa a posição do item que será substituído, e o segundo o novo item:
movies.set(3, "Harry Potter"); //
Remoção
- Não é possível remover um elemento de um array, já que possui um tamanho fixo.
- Para remover um elemento de um arraylist, vamos utilizar o método 'remove()' informando o index, ou o prórpio objeto:
a) movies.remove(0); // Jurassic park
b) movies.remove("Jurassic park");
Impressão
- Em arrays, vamos precisar chamar o método 'toString'. Se printarmos diretamente o array, tudo o que veremos será o endereço de memória:
a) System.out.println(fruits); // Será impresso o endereço de memória
b) System.out.println(Arrays.toString(fruits));
- O arraylist já vem com o toString() implementado, não havendo necessidade de chamá-lo:
System.out.println(moveis);
Vale a pena saber bem as diferenças entre as estruturas de dados na hora de criar uma coleção, pois isso pode facilitar ou dificultar a manipulação de dados em um projeto :)