Arrays (POO – Java)
prof.silvano.oliveira@gmail.com
Arrays
Um Array é uma estrutura de dados que
armazena uma coleção sequencial de tamanho
fixo de elementos do mesmo tipo.
Os arrays são usados para armazenar uma
coleção de dados, porém é interessante pensar
neles como sendo coleções de variáveis do
mesmo tipo.
Prof Silvano Oliveira (POO - Java) 2
Características dos Arrays em Java
Em Java, todos os arrays são alocados dinamicamente
Uma variável array em Java pode ser declarada como qualquer outra variável,
acrescentando colchetes [] após o tipo de dados declarado.
Arrays são objetos em Java. Assim, podemos descobrir seu tamanho usando o
atributo length do objeto.
Os elementos em um array são indexados a partir de zero.
Um array pode ter uma ou mais dimensões
O tamanho de um array sempre deve ser um valor int, e nunca um long, short ou
byte.
Podemos usar arrays em Java como um campo estático, variável local ou ainda
como parâmetros em métodos.
Um array pode conter tipos de dados primitivos ou ainda objetos de uma classe
Prof Silvano Oliveira (POO - Java) 3
Criando um array unidimensional: Vetor
tipo nomeArray[ ];
ou
tipo[ ] nomeArray;
O tipo determina qual será o tipo de dados
de todos os elementos que serão
armazenados nas posições do array
(estrutura homogênea).
Prof Silvano Oliveira (POO - Java) 4
Exemplo de declaração de array:
double[ ] salarios;
double salarios[ ]; // Ambas as formas são válidas.
Declaramos um array de nome salarios e
tipo double em um programa.
Porém, neste ponto, nenhum array ainda existe
de fato.
Prof Silvano Oliveira (POO - Java) 5
Criando um array unidimensional: Vetor
Para que essa variável seja ligada ao array real,
será necessário alocar um array usando o
operador new, e atribuindo-o à variável salário.
Desta forma, quando um array é declarado,
apenas uma referência de array é realmente
criada. Para efetivamente alocar espaço na
memória para o array, devemos proceder desta
forma:
nomeArray = new tipoDado[tamanho];
Prof Silvano Oliveira (POO - Java) 6
Criando um array unidimensional: Vetor
Criar um array em Java é um processo em duas
etapas:
Declaramos uma variável do tipo desejado para o array,
e então
Alocamos memória para efetivamente armazenar o
array, atribuindo-a à variável criada.
Exemplo:
double[ ] salarios; // Declarar o array
salarios = new double[50]; // Alocar memória para o array
Prof Silvano Oliveira (POO - Java) 7
Criando um array unidimensional: Vetor
Podemos ainda declarar a variável de referência,
criar o array, e atribuir a referência do array à
variável de uma só vez, como segue:
tipoDado[ ] variávelReferência = new tipoDado[tamanhoArray];
Em nosso exemplo:
double[ ] salarios = new double[50];
Prof Silvano Oliveira (POO - Java) 8
Criando um array unidimensional: Vetor
Os elementos do array alocados com o
operador new são automaticamente
inicializados com valores-padrão:
zero para tipos numéricos
falso para tipo boolean
null para tipos de referência (incluindo String)
Prof Silvano Oliveira (POO - Java) 9
Array literal
Quando sabemos de antemão o tamanho do array
e quais serão os valores que serão armazenados
nas posições do array, podemos usar literais de
array:
tipoDado[ ] variávelReferência = {valor1, valor2, …, valorN};
Prof Silvano Oliveira (POO - Java) 10
Array literal
Por exemplo, suponha um array de 5 posições do
tipo inteiro, do qual sabemos de antemão de será
necessário armazenar os números 5, 9, 12, 3 e 4.
podemos declarar esse array da seguinte forma:
int[ ] numeros = { 5, 9, 12, 3, 4 };
Neste caso, não é necessário usar o operador new
para criar o array (exceto em versões muito antigas
do Java).
Prof Silvano Oliveira (POO - Java) 11
Como acessar os elementos de um array em Java
Os elementos em um array são sempre
acessados por meio de seu número de índice
(que é a posição do elemento). Esse índice
sempre se inicia em zero, e termina
em tamanhoArray – 1.
Por exemplo, um array de dez posições tem a
sua primeira posição com índice zero e sua
última posição com 10 -1 = índice 9. Portanto, se
trata de um array cujas posições vão de 0 a 9.
Prof Silvano Oliveira (POO - Java) 12
Acessando e alterar posições individuais em um array (vetor)
Acessar um elemento individual em um array
simplesmente indicando o número de índice da
posição desejada (entre colchetes), junto ao
nome do array em si.
// Criar o array e atribuir-lhe valores a partir de uma lista de inicialização:
double[ ] valores = { 4.5, 5.9, 4.1, 2.0, 8.9, 6.3, 7.8, 5.3, 1.2, 0.8 };
// Acessando seu quinto elemento (número de posição 4)
System.out.println("Elemento 5 do array: " + valores[4])
Prof Silvano Oliveira (POO - Java) 13
Atribuindo valores
O mesmo vale para a atribuição de valores
ao array. Por exemplo, vamos modificar os
valores das posições de índices 4 e 6 para
2.3 e 7.1, respectivamente:
valores[4] = 2.3;
valores[6] = 7.1;
Prof Silvano Oliveira (POO - Java) 14
Mostrando o resultado
// Acessando os elementos alterados
System.out.println("Valor alterado para: " + valores[4]);
System.out.println("Valor alterado para: " + valores[6]);
Prof Silvano Oliveira (POO - Java) 15
Acessando todas as posições de uma vez via laço for
Podemos acessar todas as posições de um
array usando um simples laço for e a
propriedade length do array, como segue:
for (int i = 0; i < nomeArray.length; i++) {
Código a executar para cada elemento
}
Prof Silvano Oliveira (POO - Java) 16
Exemplo
Criar um array de números double e acessar seus elementos
usando um laço for.
// Criar array e atribuir-lhe valores a partir de uma lista de inicialização:
double[ ] valores = { 4.5, 5.9, 4.1, 2.0, 8.9, 6.3, 7.8, 5.3, 1.2, 0.8 };
// Mostrar todos os elementos do array:
for (int i = 0; i < valores.length; i++) {
System.out.println("Elemento " + i + " = " + valores[i]);
}
Prof Silvano Oliveira (POO - Java) 17
Resultado
Prof Silvano Oliveira (POO - Java) 18
Acessando todas as posições do array usando laço foreach
Mostrar todos os elementos do array valores usando um
laço foreach (for enhanced em Java):
public static void main(String[ ] args) {
double[ ] valores = { 4.5, 5.9, 4.1, 2.0, 8.9, 6.3, 7.8, 5.3, 1.2, 0.8 };
// Mostrar todos os elementos do array:
for (double elemento: valores) {
System.out.println(elemento);
}
}
Prof Silvano Oliveira (POO - Java) 19
foreach
A declaração foreach é usada quando há a
necessidade de percorrer o array sem usar um
contador.
Observação: Cuidado ao usar um laço foreach
para iterar pelos elementos de um array em
Java. Essa técnica não é apropriada quando
queremos modificar o array, além de não manter
registro do número de índice que está sendo
acessado.
Prof Silvano Oliveira (POO - Java) 20
Exercicio
Crie uma classe Produtos, que contém
Um atributo nome do produto
Um atributo preço do produto (indicando o preço dos
produtos em diferentes supermercados) do tipo array com
5 posições
Um método para alterar cada atributo (setter)
Um método para obter o valor de cada atributo (getter)
Um método para encontrar o maior preço de um produto
Um método para encontrar o menor preço do produto
Um método para calcular o preço médio do produto
Prof Silvano Oliveira (POO - Java) 21
Arrays multidimensionais
Esse tipo de array é declarado como tendo duas dimensões e é
usado para representar tabelas de valores que consistem em
informações organizadas em linhas e colunas.
Os arrays bidimensionais precisam de dois índices para
identificar um elemento particular.
Prof Silvano Oliveira (POO - Java) 22
Arrays multidimensionais
Para criar uma matriz bidimensional, adicione
cada matriz dentro de seu próprio conjunto
de chaves:
Exemplo
int[ ][ ] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} };
myNumbers é agora uma matriz com duas
matrizes como seus elementos.
Prof Silvano Oliveira (POO - Java) 23
Arrays multidimensionais
Para ter acesso aos elementos do MyNumbers
matriz, especificar dois índices: um para a matriz,
e um elemento para o interior dessa matriz. Este
exemplo acede ao terceiro elemento (2) na
segunda matriz (1) de MyNumbers:
Exemplo
int[ ][ ] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} };
int x = myNumbers[1][2];
System.out.println(x); // Saída 7
Prof Silvano Oliveira (POO - Java) 24
Arrays multidimensionais
Também pode usar um for dentro do outro for para obter os
elementos de uma matriz bidimensional (ainda temos de apontar
para os dois índices):
Exemplo
public class MyClass {
public static void main(String[ ] args) {
int[ ][ ] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} };
for (int i = 0; i < myNumbers.length; ++i) {
for(int j = 0; j < myNumbers[i].length; ++j) {
System.out.println(myNumbers[i][j]);
}
}
}
}
Prof Silvano Oliveira (POO - Java) 25