Вы находитесь на странице: 1из 45

Array ou Matriz & ArrayList

Ren Furtado Felix


rffelix70@yahoo.com.br
Orientao a Objeto Java 2
Ren Furtado Felix
Array ou Matrizes
Introduo
Segundo Kathy Sierra, uma matriz como uma bandeja
com xcaras:
1- declare uma varivel de matriz int.
int [ ] nums;
2- Crie uma nova matriz int de tamanho 7.
nums [ ] = new int [ 7 ];
Orientao a Objeto Java 3
Ren Furtado Felix
Array ou Matrizes
Introduo
Um Array um grupo de variveis que contm valores
(todos) do mesmo tipo.

Por serem considerados objetos, so tipos por referencia,
isto , uma referencia a um objeto na memria.

Podem ser tambm tipos primitivos.

O numero de posio chamado ndice do elemento.

A figura abaixo mostra um exemplo de Array de inteiros,
chamado C, com 12 elementos:
Orientao a Objeto Java 4
Ren Furtado Felix
Array
Introduo
Orientao a Objeto Java 5
Ren Furtado Felix
Array
Vamos analisar a Array c.

Cada objeto da Array conhece seu prprio tamanho e
armazena o uma varivel de instncia Length.

A expresso Array c.lenght para determinar o comprimento
do Array.
OBS: embora a varivel Length seja public ela no pode ser
alterada porque uma varivel final.

Os elementos conhecidos so: c[0] -45, o Valor de c[1] 6
e assim por diante.








Orientao a Objeto Java 6
Ren Furtado Felix
Array
Vamos analisar a Array c.
Se calculssemos a soma dos valores contidos nos
primeiros trs elementos de array c e armazenssemos o
resultado na varivel sum, escreveramos:
sum = c[0] + c[1] + c[2];

Para dividir o valor de c[6] por 2 e atribuir o resultado
varivel x, escreveramos:

x = c[6] / 2;








Orientao a Objeto Java 7
Ren Furtado Felix
Array
Kathy afirma que as matrizes so objetos;
As matrizes serviro bem quando voc quiser apenas obter
uma lista de coisas de maneira rpida, ordenada e eficiente.
Todo elemento de uma matriz apenas uma varivel.

As matrizes sempre sero objetos, no importa se foram
declaradas para conter tipos primitivos ou referncias de
objetos.

Voc pode ter um objeto de matriz que tenha sido declarado
para conter valores primitivos, o objeto pode ter elementos
primitivos, mas a matriz propriamente dita nunca de um
tipo primitivo. Independentemente do que a matriz
armazenar, ela sempre ser um objeto.







Orientao a Objeto Java 8
Ren Furtado Felix
Array
Criando uma matriz de objetos Dog.
1. Declare uma varivel de matriz Dog.
2. Dog [ ] pets;
3. Crie uma nova matriz Dog com tamanho igual a 7 e a atribua
varivel Dog[ ] pets.
4. pets = new Dog [ 7 ];
5. O que est faltando???????????
6. Temos uma matriz de referncia Dog, mas nenhum objeto Dog real.
7. pets[0] = new Dog;
8. pets[1] = new Dog;








Orientao a Objeto Java 9
Ren Furtado Felix
public class Books {
String title;
String author;
}
class BooksTestDrive{
public static void main(String[] args) {
Books [ ] myBooks = new Books [3];
int x = 0;
myBooks[0] = new Books();
myBooks[1] = new Books();
myBooks[2] = new Books();
myBooks[0].title = "The Grapes of Java";
myBooks[1].title = "The Java Gatsby";










myBooks[2].title="The Java Cookbook";
myBooks[0].author = "bob";
myBooks[1].author = "sue";
myBooks[2].author = "ian";
while (x < 3){
System.out.println(myBooks[x].title);
System.out.println(" by ");
System.out.println(myBooks[x].author);
x = x + 1;
}
}
}








Orientao a Objeto Java 10
Ren Furtado Felix
Array
Resultado do Array BooksTestDrive:
The Grapes of Java
by
bob
-------------------------------------------------------------
The Java Gatsby
by
sue
---------------------------------------------------------------
The Java Cookbook
by
ian











Orientao a Objeto Java 11
Ren Furtado Felix
Array
Declarando e criando arrays.
So criados com a palavra-chave new.
Para criar um objeto de array, especifique o tipo de
elemento e o nmero de elementos.
Criando um array que contm 12 elementos int e
armazena a referencia do array na varivel c do
array.
int [ ] c = new int [ 12 ];
Ou em dois passos:
int c [ ];//declara a varivel de array
c = new int [ 12 ] // cria o array, atribui varivel de array.












Orientao a Objeto Java 12
Ren Furtado Felix
Array
Criando varias arrays em uma nica declarao:
String [ ] b = new String [100 ], x = new String [27];

Quando somente uma varivel declarada, os
colchetes podem ser colocados depois do tipo ou
depois do nome da varivel de array, exemplo:

String b[ ] = new String [ 100 ]; //cria array b
String x[ ] = new String [ 27 ]; //cria array x











Orientao a Objeto Java 13
Ren Furtado Felix
Array
1 exemplo de array:
public class InitArray {
public static void main( String [] args) {
int [ ] array;// declara o array identificado
array = new int [ 10 ]; //cria o objeto do array
System.out.println(%s%8s\n, Index, Value);
//gera saida do valor de cada elemento do array
for (int counter = 0; counter < array.lenght; counter++)
System.out.println(%5d%8d\n, counter, array[ counter ]);
}
}











Orientao a Objeto Java 14
Ren Furtado Felix
Array
Sada da array:












Index Value
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
Orientao a Objeto Java 15
Ren Furtado Felix
Array
Utilizar um inicializador de array
int [ ] n = {10, 20, 30, 40, 50};
Veja que foi criado um array de elementos com
valores de ndice 0 a 4.
Elemento 20, n [ 1 ], inicializado em 20.

Vamos para mais um cdigo:










Orientao a Objeto Java 16
Ren Furtado Felix
Array
Vamos inicializar um array de 10 elementos, e exibe em
formato tabular:
Public class InitArray{
Public static void main( String[ ] args ) {
//lista de inicializador especifica o valor de cada elemento
Int [ ] array = {32,27,64,18,95,14,90,70,60,37};
System.out.println(%s%s\n,Index, Value);//titulo da coluna
//gera sada do valor de cada elemento do array
for(int counter = 0; counter < array.lenght; counter++)
System.out.printf(%Sd%8d\d, counter, array[counter]);
}
}










Orientao a Objeto Java 17
Ren Furtado Felix
Array
Resultado da array:










Index Value
0 32
1 27
2 64
3 18
4 95
5 14
6 90
7 70
8 60
9 37
Orientao a Objeto Java 18
Ren Furtado Felix
Array
Calculando os valores a armazenar em um
array.

A prxima array de 10 elementos e atribui a cada
elementos um dos inteiros pares 2 a 20 (2, 4, 6,
..,20).
O array exibe em formato tabular.
A instruo for nas linhas 12-13 calcula o valor de
um elemento do array multiplicando o valor atual da
varivel de controle counter por 2 e adicionando 2.









Orientao a Objeto Java 19
Ren Furtado Felix
Array
public class InitArray{
public static void main(String[]args){
final int ARRAY_LENGTH = 10;//declara constante
int[ ] array = new int [ ARRAY_LENGTH];//cria o array
//calcula o valor de cada elemento do array
for (int counter=0; counter < array.length; counter ++)
array [counter] = 2+2 * counter;
System.out.printf("%s%8s\n", "Index", "Value");
//gera sada do valor de cada elemento do array
for(int counter=0; counter < array.length; counter ++)
System.out.printf("%5d%8d\n", counter, array[counter]);
} }








Orientao a Objeto Java 20
Ren Furtado Felix
Array
Saida da array apresentada:
A array possui o modificador
final para declarar a varivel
ARRAY_LENGTH, com
valor 10.

Se voc tentar modificar uma
varivel final depois que ela
inicializada o compilador
emite uma mensagem de erro.








Index Value
0 2
1 4
2 6
3 8
4 10
5 12
6 14
7 16
8 18
9 20

Orientao a Objeto Java 21
Ren Furtado Felix
Array
Somando os elementos de uma array.
public class SumArray {
public static void main(String[] args) {
int [] array = {87, 68, 94, 100, 83, 78, 85, 91, 76, 87 };
int total = 0;
for(int counter=0; counter<array.length; counter++)
total += array[counter];
System.out.println("Total of array elements: " +total);
}
}
Resultado:
Total of array elements: 849





Orientao a Objeto Java 22
Ren Furtado Felix
public class BarChart {
public static void main(String[] args) {
int[]array = {0,0,0,0,0,0,1,2,4,2,1};
System.out.println("Grade distribution:");
//para cada elemento do array, gera uma sada de uma barra do grfico
for(int counter=0; counter<array.length; counter++){
//imprime o rtulo de barra ("00-99:","100:")
if(counter == 10) System.out.printf("%5d: ", 100);
else System.out.printf("%02d-%02d: ",counter * 10, counter * 10 + 9);
//imprime a barra asteristicos
for (int stars = 0; stars<array[counter];stars++)
System.out.print("*");
System.out.println();//inicia nova linha
} } }




Orientao a Objeto Java 23
Ren Furtado Felix
Array
Resultado do array BarChart



Grade distribution:
00-09:
10-19:
20-29:
30-39:
40-49:
50-59:
60-69: *
70-79: **
80-89: ****
90-99: **
100: *
Orientao a Objeto Java 24
Ren Furtado Felix
Array
Utilizando os elementos de um array como contadores:

A classe RollDie, utiliza a array frequency para contar a
ocorrncia de cada fase do dado.
Uma instruo utiliza um valor aleatrio de 1 a 6.
O array frequency deve ser grande o bastante para
armazenar seis contadores.
O valor de array frequency[0] ignorado para
incrementar no valor nominal 1.
O calculo dentro do colchete onde incrementamos
++frequency avaliado primeiro para determinar qual
elemento incrementa e o operador ++ adiciona um
elemento.


Orientao a Objeto Java 25
Ren Furtado Felix
A classe RollDie
import java.util.Random;
public class RollDie {
public static void main(String[] args) {
Random randomNumbers = new Random();//gerador de numero aleatorio
int[] frequency = new int[7];//array de contador frequency
//lana o dado 6000 vezes
//utiliza o valor do dado como indice de frequency
for (int roll = 1; roll<=6000; roll++)
++frequency[1+randomNumbers.nextInt(6)];
System.out.printf("%s%10s\n","Face","Frequency");
//gera sada do valor de cada elemento do array
for (int face=1; face < frequency.length; face++)
System.out.printf("%4d%10d\n", face, frequency[face]);}}
Orientao a Objeto Java 26
Ren Furtado Felix
Array
A classe RollDie

Um possivel resultado
da classe
Face Frequency
1 1016
2 931
3 993
4 1017
5 995
6 1048
Orientao a Objeto Java 27
Ren Furtado Felix
Array
Passando arrays para mtodos
Para passar um argumento de array para um
mtodo, especifique o nome do array sem
nenhum colchete. Ex:
double [ ] hourlyTemperatures = new double[24];
A chamada do mtodo:
modifyArray( hourlyTemperatures );
Todo objeto do array conhece seu prprio comprimento
via seu campo length.

Orientao a Objeto Java 28
Ren Furtado Felix
Array
Passando arrays para mtodos
Para um mtodo receber uma referncia de array por uma
chamada de mtodo, deve-se especificar um parmetro
de array. Ex:
void modifyArray( double [ ] b );
Quando um argumento para um mtodo for um elemento
de array individual de um tipo primitivo, o mtodo
chamado recebe uma cpia do valor do elemento.
Esses valores primitivos so chamados escalares ou
quantidades escalares.
Para passar um elemento de array para um mtodo, utilize
o nome indexado do array como argumento na chamada
de mtodo
Orientao a Objeto Java 29
Ren Furtado Felix
Array - exemplo
public class PassArray {
//main cria a array e chama modifyArray e modifyElement
public static void main(String [ ] args){
int [ ] array = { 1, 2, 3, 4, 5 };
System.out.println(Effects of passing reference to entire
array:\n + The values of the original array are:);
//gera saida de elementos do array original
for ( int value : array )
System.out.printf( %d, value);
System.out.printf(
\n\nEffects of passing array element value:\n +
array[3] before modifyElement: %d\n, array[3]);



Orientao a Objeto Java 30
Ren Furtado Felix
Array - exemplo
modifyElement( array[3]);//tenta modificar o array [ 3 ]
System.out.printf(
array[3] after modifyElement: %d\n, array[ 3 ]);}//fim main
//multiplica cada elemento de um array por 2
public static void modifyArray(int[ ] array2) {
for (int counter = 0; counter <= array2.length; counter++)
}//fim do mtodo modifyArray
//multiplica argumento por 2
public static void modifyElement( int element ) {
element *= 2;
System.out.printf(
value of element in modifyElement: %d\n, element); } }
Orientao a Objeto Java 31
Ren Furtado Felix
Array - exemplo
Resultado da classe PassArray:

Effects of passing reference to entire array:
The values of the original array are:
1 2 3 4 5

Effects of passing array element value:
array[3] before modifyElement: 4
value of element in modifyElement: 8
array[3] after modifyElement: 4
Orientao a Objeto Java 32
Ren Furtado Felix
Arrays multidimensionais
Arrays com duas dimenses usadas para representar
tabelas de valores organizadas em linhas e colunas.
Para identificar, devemos especificar dois ndices.
Por conveno o primeiro identifica a linha do elemento e
o segundo sua coluna.
int [ ] [ ] b = { {1,2}, {3,4}};


Orientao a Objeto Java 33
Ren Furtado Felix
Arrays multidimensionais
Exemplo mais comum para demonstrar a execuo de um array
bidimensional:
public class ExArray {
public static void main(String[] args) {
int m[][] = { {1, 2, 3, 4}, {5, 6} };
int i, j;
for (i=0; i< m.length; i++) {
System.out.printf("%da. linha: ", (i+1));
for (j=0; j<m[i].length; j++) {
System.out.printf("%d ", m[i][j]);}
System.out.printf("\n");}
} }



Orientao a Objeto Java 34
Ren Furtado Felix
Arrays multidimensionais
Arrays bidimensionais, so bem flexveis, podem ter diferentes
comprimentos de linhas:
int [ ] [ ] b = { { 1,2 },{ 3,4,5} };
//O array da linha 0 -> (1,2)
//O array da linha 1 -> (3,4 e 5);
//Criando arrays bidimensionais com expresses de criao de array.
Int [ ] [ ] b = new int[ 3 ] [ 4 ];
//Valores 3 e 4 para especificar o nmero de linhas e nmeros de colunas.
Pode-se criar um array multidimensional em que cada linha tem
um nmero diferente de colunas:
Int [ ] [ ] b = new int [ 2 ] [ ]; //cria 2 linhas
b[ 0 ] = new int[ 5 ];//cria 5 colunas para a linha 0
b[ 1 ] = new int[ 3 ];//cria 3 colunas para a linha 1
Orientao a Objeto Java 35
Ren Furtado Felix
Arrays multidimensionais
Exemplo de array bidimensional: exibindo valores de elemento.
public class InitArray{
public static void main( String[ ] args ){
int[ ] [ ] array1 = { {1,2,3},{4,5,6} };
int[ ] [ ] array2 = { {1,2} , {3}, {4,5,6} };
System.out.println("Values in array1 by row are");
outputArray( array1 );// exibe array1 por linha
System.out.println("\nValues in array2 by row are");
outputArray( array2 );}//exibe array2 por linha
public static void outputArray(int[ ][ ] array){
//faz um loop pelas linhas do array
for (int row = 0; row < array.length; row ++) {
//faz um loop pelas colunas da linha atual
for (int column = 0; column < array[row].length; column++)
System.out.printf("%d", array[ row ] [ column ] );
System.out.println();}}}//inicia nova linha de sada




Orientao a Objeto Java 36
Ren Furtado Felix
Arrays multidimensionais
Exemplo de array bidimensional: exibindo valores de elemento.
Resultado da array InitArray.

Values in array1 by row are
1 2 3
4 5 6

Values in array2 by row are
1 2
3
4 5 6



Orientao a Objeto Java 37
Ren Furtado Felix
ArraysList




Orientao a Objeto Java 38
Ren Furtado Felix
ArraysList
Arrays no alteram automaticamente seu tamanho em
tempo de execuo para acomodar elementos
adicionais.
A coleo classe ArrayList <T> (do pacote java.util)
fornece uma soluo conveniente para este problema
poder alterar dinamicamente seu tamanho para
acomodar mais elementos. Exemplo:
ArrayList< String > list;
Declara list como uma coleo ArrayList que s pode
armazenar Strings.

Vamos ver alguns mtodos comuns do ArrayList:




Orientao a Objeto Java 39
Ren Furtado Felix
ArraysList




Mtodos Descrio
add Adiciona um elemento ao final do ArrayList.
clear Remove todos os elementos do ArrayList.
contains

Retorna verdadeiro se o ArrayList contm o elemento
especificado, caso contrrio, retorna falso.
get Retorna o elemento do ndice especificado.
indexOf

Retorna o ndice da primeira ocorrncia do elemento
especificado no ArrayList.
remove Remove a primeira ocorrncia do valor especificado.
remove Remove o elemento no ndice especificado.
size Retorna o nmero de elementos armazenados na ArrayList.

toArray() Retorna um array contendo os objetos na coleo.
trimToSize Arranja a capacidade do ArrayList para o nmero atual de
elementos.
Orientao a Objeto Java 40
Ren Furtado Felix
ArraysList
1 package br.com;
2 import java.util.ArrayList;
3 public class ArrayListCollection {
4 public static void main(String[] args) {
//cria um novo ArrayList de strings
5 ArrayList< String > items = new ArrayList< String >( );
6 items.add("red");//acrescenta um tem lista
7 items.add(0, "yallow");//insere o valor no indice 0
//cabealho






Orientao a Objeto Java 41
Ren Furtado Felix
ArraysList
8 System.out.println("Mostra o contedo da lista com
lao controlado por contador");
//exibe as cores na lista
9 for(int i=0; i<items.size();i++)
10 System.out.printf("%s ",items.get(i));
//exibe as cores utilizando foreach no mtodo display
11 display(items, "\nMostra o contedo da lista com
instruo for aprimorada");
12 items.add("green");//adiciona green no final da lista
13 items.add("yellow");//adiciona yellow no final da lista






Orientao a Objeto Java 42
Ren Furtado Felix
ArraysList
14 display(items, "Lista com dois novos elementos:");
15 items.remove("yellow");//remove o primeiro yellow
display(items, "Remover primeira instncia de yellow:");
16 items.remove(1);//remove o item no indice 1
17 display(items, "Retire segundo elemento da lista (green):");
//verifica se um valor esta em List
18 System.out.printf("\"red\" is %s in the list\n",
19 items.contains("red")?"":"not");
//exibe o numero de elementos em List






Orientao a Objeto Java 43
Ren Furtado Felix
ArraysList
20 System.out.printf("Size: %s\n", items.size());}
//exibe os elementos do ArrayList no console
21 public static void display( ArrayList< String>
22 items, String header){
23 System.out.println( header);//exibe o cabealho
//exibe cada elemento nos itens
24 for (String item:items)
25 System.out.printf(" %s", item);
26 System.out.println();
}}






Orientao a Objeto Java 44
Ren Furtado Felix
......JAVA......





Dvidas
Orientao a Objeto Java 45
Ren Furtado Felix
BIBLIOGRAFIA
Introduo ao Java, Daniel Destro do Carmo
Use a Cabea Java, Kathy Sierra e Bert Bates
Certificao Sun para Programador Java 6, Kathy Sierra e
Bert Bates