aula-04-array

Propaganda
Programação Java
Aula 04
Tópicos da aula
• Declarar e instanciar arrays.
• Popular e percorrer arrays.
2
Vetor (array) (1)
• Declarando um vetor de inteiros:
int[] idades = new int[10];
• O int[] é um tipo. Uma array é sempre um
objeto, portanto, a variável idades é uma
referência.
• O que fizemos foi criar um array de inteiros de
10 posições e atribuir o endereço no qual ele
foi criado.
3
Vetor (array) (2)
• Podemos ainda acessar as posições do array.
O código a seguir altera a sexta posição do
array. No Java, os índices do array vão de 0 a
n-1, onde n é o tamanho dado no momento
em que você criou o array:
idades[5] = 10;
4
Vetor (array) (3)
• Se você tentar acessar uma posição fora desse
alcance, um erro ocorrerá durante a execução.
• No Java, muitas vezes utilizamos outros
recursos em vez de arrays, em especial os
pacotes de coleções do Java (API Collections),
que veremos mais a frente no curso.
5
Vetor (array) (4)
• Outro exemplo (a quantidade de posições do
array definido por uma variável):
int idades[] = new int[n];
• E assim podemos acessar e modificar os
inteiros com índice de 0 a n-1.
6
Arrays de referências ("objetos")
• É comum ouvirmos “array de objetos”. Porém
quando criamos um array de alguma classe,
ele possui referências.
• O objeto, como sempre, está na memória
principal e, no seu array, só ficam guardadas
as referências (endereços).
7
Conta[] minhasContas = new Conta[10];
• Quantas contas foram criadas aqui?
Nenhuma!
• Foram criados 10 espaços que você pode
utilizar para guardar uma referência a uma
Conta.
• Por enquanto, eles se referenciam para lugar
nenhum (null). Se você tentar:
System.out.println(minhasContas[0].saldo);
– Um erro durante a execução ocorrerá! Pois, na
primeira posição do array, não há uma referência
para uma conta, nem para lugar nenhum.
8
• Você deve popular seu array antes:
Conta contaNova = new Conta();
contaNova.saldo = 1000.0;
minhasContas[0] = contaNova;
• Ou, diretamente:
minhasContas[1] = new Conta();
minhasContas[1].saldo = 3200.0;
– Um array de tipos primitivos guarda valores.
– Um array de objetos guarda referências.
9
10
11
Percorrendo um array (1)
• Percorrer um array é muito simples quando
fomos nós que o criamos:
int[] idades = new int[10];
for (int i = 0; i < 10; i++) {
idades[i] = i * 10;
}
for (int i = 0; i < 10; i++) {
System.out.println(idades[i]);
}
12
Percorrendo um array (2)
• Porém, em muitos casos, recebemos um array
como argumento em um método.
• Até onde o for deve ir? Todo array em Java
tem um atributo que se chama length, e você
pode acessá-lo para saber o tamanho do array
ao qual você está se referenciando naquele
momento:
13
Percorrendo um array (3)
void imprimeArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
14
15
Percorrendo um array no Java 5 (1)
• O Java 5 traz uma nova sintaxe para percorremos
arrays (e coleções, que veremos mais a frente no
curso).
– Versão 1.2 (Java 1.2) mais estável durante anos.
– Nos últimos anos novas versões apenas revisaram
algumas características e corrigiram bugs.
– A partir da versão 1.5 (ou apenas Java 5, como ficou
sendo chamada) ocorreram mudanças significativas.
– Atualmente a versão disponível no mercado é a Java 8
(Update 5 de 15/04/2014).
• História das versões de Java (JDK, Plataforma, JVM)
disponível em:
http://en.wikipedia.org/wiki/Java_version_history
16
Percorrendo um array no Java 5 (2)
• Não precisamos mais do length para percorrer
arrays cujo tamanho não conhecemos:
void imprimeArray(int[] array) {
for (int x : array) {
System.out.println(x);
}
}
• O mesmo é válido para arrays de referências. Esse
for nada mais é que um truque de compilação
para facilitar essa tarefa de percorrer arrays e
torná-la mais legível.
17
Arrays não podem mudar de tamanho
• A partir do momento que um array foi criado,
ele não pode mudar de tamanho.
• Se você precisar de mais espaço, será
necessário criar um novo array e, antes de se
referir ele, copiar os elementos do array velho.
18
Manipulação de array (exemplo)
• E se eu quiser remover um elemento do array?
private static int[] vetor;
public static void main(String[] args) {
vetor = new int[] {1, 2, 3, 4, 5};
imprimeArray(vetor);
remove(4);
remove(2);
imprimeArray(vetor);
}
19
public static void remove(int y) {
int posicao = -1;
for (int i = 0; i < vetor.length; i++)
if (vetor[i] == y)
posicao = i;
if (posicao != -1) {
int[] vetorAux = new int[vetor.length - 1];
for (int i = 0; i < vetorAux.length; i++) {
if (i < posicao)
vetorAux[i] = vetor[i];
else
vetorAux[i] = vetor[i + 1];
}
vetor = vetorAux;
}
}
20
Collections framework (1)
• Não podemos redimensionar um array.
• Não é possível buscar diretamente um
determinado elemento cujo índice não se
sabe.
• Não se consegue saber quantas posições do
array já foram populadas sem criar, para isso,
métodos auxiliares.
• Ou seja, arrays são trabalhosos. Uma
alternativa é utilizar estrutura de dados.
21
Collections framework (2)
• Vetor de inteiros:
int idades[] = new int[n];
• ArrayList (coleção) de inteiros:
ArrayList<Integer> idades = new ArrayList<Integer>();
• Para o uso do ArrayList é necessário:
import java.util.ArrayList;
22
ArrayList (1)
• add(Object elem)
– Adicionará o parâmetro de objeto à lista.
• remove(int index)
– Removerá o objeto do parâmetro de índice.
• remove(Object elem)
– Removerá esse objeto (se ele estiver na ArrayList).
• contains(Object elem)
– Retornará true se houver uma coincidência com o
parâmetro de objeto.
23
ArrayList (2)
• isEmpty()
– Retornará true se a lista não tiver elementos.
• indexOf(Object elem)
– Retornará o índice do parâmetro de objeto ou -1.
• size()
– Retornará a quantidade de elementos existentes na
lista atualmente.
• get(int index)
– Retornará o objeto que se encontra atualmente no
parâmetro de índice.
24
ArrayList (3)
• Vetor de objetos:
Conta[] contas = new Conta[n];
• ArrayList de (objetos) Conta:
ArrayList<Conta> contas = new ArrayList<Conta>();
25
ArrayList (4)
ArrayList<Conta> contas = new ArrayList<Conta>();
Conta c1 = new Conta();
c1.saldo = 1000.0;
contas.add(c1);
Conta c2 = new Conta();
c2.saldo = 3200.0;
contas.add(c2);
26
Download