Post on 19-Jan-2016
Array ou Matriz & ArrayList
Renê Furtado Felixrffelix70@yahoo.com.br
Orientação a Objeto Java 2Renê Furtado Felix
Array ou Matrizes
IntroduçãoSegundo Kathy Sierra, uma matriz é como uma bandeja com xícaras:
1- declare uma variável de matriz int.
int [ ] nums;
2- Crie uma nova matriz int de tamanho 7.
nums [ ] = new int [ 7 ];
Orientação a Objeto Java 3Renê Furtado Felix
Array ou Matrizes
IntroduçãoUm Array é um grupo de variáveis que contém valores (todos) do mesmo tipo.
Por serem considerados objetos, são tipos por referencia, isto é, uma referencia a um objeto na memória.
Podem ser também tipos primitivos.
O numero de posição é chamado índice do elemento.
A figura abaixo mostra um exemplo de Array de inteiros, chamado C, com 12 elementos:
Orientação a Objeto Java 4Renê Furtado Felix
Array
Introdução
Orientação a Objeto Java 5Renê Furtado Felix
Array
Vamos analisar a Array c.
Cada objeto da Array conhece seu próprio tamanho e armazena –o uma variável de instância Length.
A expressão Array c.lenght para determinar o comprimento do Array.
OBS: embora a variável Length seja public ela não pode ser alterada porque é uma variável final.
Os elementos conhecidos são: c[0] é -45, o Valor de c[1] é 6 e assim por diante.
Orientação a Objeto Java 6Renê Furtado Felix
Array
Vamos analisar a Array c.Se calculássemos a soma dos valores contidos nos primeiros três elementos de array c e armazenássemos o resultado na variável sum, escreveríamos:
sum = c[0] + c[1] + c[2];
Para dividir o valor de c[6] por 2 e atribuir o resultado à variável x, escreveríamos:
x = c[6] / 2;
Orientação a Objeto Java 7Renê Furtado Felix
Array
Kathy afirma que as matrizes são objetos;
As matrizes servirão bem quando você quiser apenas obter uma lista de coisas de maneira rápida, ordenada e eficiente.
Todo elemento de uma matriz é apenas uma variável.
As matrizes sempre serão objetos, não importa se foram declaradas para conter tipos primitivos ou referências 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.
Orientação a Objeto Java 8Renê Furtado Felix
Array
Criando uma matriz de objetos Dog.1.Declare uma variável de matriz Dog.
2. Dog [ ] pets;
3.Crie uma nova matriz Dog com tamanho igual a 7 e a atribua à variável Dog[ ] pets.
4. pets = new Dog [ 7 ];
5.O que está faltando???????????
6.Temos uma matriz de referência Dog, mas nenhum objeto Dog real.
7.pets[0] = new Dog;
8.pets[1] = new Dog;
Orientação a Objeto Java 9Renê Furtado Felix
Orientação a Objeto Java 10Renê Furtado Felix
Array
Resultado do Array BooksTestDrive:The Grapes of Java by bob-------------------------------------------------------------The Java Gatsby by sue---------------------------------------------------------------The Java Cookbook by ian
Orientação a Objeto Java 11Renê Furtado Felix
Array
Declarando e criando arrays.
São criados com a palavra-chave new.
Para criar um objeto de array, especifique o tipo de elemento e o número de elementos.
Criando um array que contém 12 elementos int e armazena a referencia do array na variável c do array.
int [ ] c = new int [ 12 ];Ou em dois passos:
int c [ ];//declara a variável de array
c = new int [ 12 ] // cria o array, atribui à variável de array.
Orientação a Objeto Java 12Renê Furtado Felix
Array
Criando varias arrays em uma única declaração:String [ ] b = new String [100 ], x = new String [27];
Quando somente uma variável é declarada, os colchetes podem ser colocados depois do tipo ou depois do nome da variável de array, exemplo:
String b[ ] = new String [ 100 ]; //cria array b
String x[ ] = new String [ 27 ]; //cria array x
Orientação a Objeto Java 13Renê 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 ]);
}
}
Orientação a Objeto Java 14Renê Furtado Felix
Array
Saída da array:Index Value
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
Orientação a Objeto Java 15Renê Furtado Felix
Array
Utilizar um inicializador de arrayint [ ] 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 código:
Orientação a Objeto Java 16Renê 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 saída do valor de cada elemento do array
for(int counter = 0; counter < array.lenght; counter++)
System.out.printf(“%Sd%8d\d”, counter, array[counter]);
}
}
Orientação a Objeto Java 17Renê 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
Orientação a Objeto Java 18Renê Furtado Felix
Array
Calculando os valores a armazenar em um array.
A próxima 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 instrução for nas linhas 12-13 calcula o valor de um elemento do array multiplicando o valor atual da variável de controle counter por 2 e adicionando 2.
Orientação a Objeto Java 19Renê 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 saída do valor de cada elemento do array
for(int counter=0; counter < array.length; counter ++)
System.out.printf("%5d%8d\n", counter, array[counter]);
} }
Orientação a Objeto Java 20Renê Furtado Felix
Array
Saida da array apresentada:
A array possui o modificador final para declarar a variável ARRAY_LENGTH, com valor 10.
Se você tentar modificar uma variável 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
Orientação a Objeto Java 21Renê 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
Orientação a Objeto Java 22Renê 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 saída de uma barra do gráfico
for(int counter=0; counter<array.length; counter++){//imprime o rótulo 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
} } }
Orientação a Objeto Java 23Renê 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: *
Orientação a Objeto Java 24Renê Furtado Felix
Array
Utilizando os elementos de um array como contadores:
A classe RollDie, utiliza a array frequency para contar a ocorrência de cada fase do dado.
Uma instrução utiliza um valor aleatório 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.
Orientação a Objeto Java 25Renê 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//lança 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 saída do valor de cada elemento do array
for (int face=1; face < frequency.length; face++)
System.out.printf("%4d%10d\n", face, frequency[face]);}}
Orientação a Objeto Java 26Renê 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
Orientação a Objeto Java 27Renê Furtado Felix
Array
Passando arrays para métodos
Para passar um argumento de array para um método, especifique o nome do array sem nenhum colchete. Ex:double [ ] hourlyTemperatures = new double[24];
A chamada do método:
modifyArray( hourlyTemperatures );Todo objeto do array “conhece” seu próprio comprimento via seu campo length.
Orientação a Objeto Java 28Renê Furtado Felix
Array
Passando arrays para métodosPara um método receber uma referência de array por uma chamada de método, deve-se especificar um parâmetro de array. Ex:
void modifyArray( double [ ] b );
Quando um argumento para um método for um elemento de array individual de um tipo primitivo, o método chamado recebe uma cópia do valor do elemento.
Esses valores primitivos são chamados escalares ou quantidades escalares.
Para passar um elemento de array para um método, utilize o nome indexado do array como argumento na chamada de método
Orientação a Objeto Java 29Renê 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]);
Orientação a Objeto Java 30Renê 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 método modifyArray
//multiplica argumento por 2
public static void modifyElement( int element ) {
element *= 2;
System.out.printf(
“value of element in modifyElement: %d\n”, element); } }
Orientação a Objeto Java 31Renê 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: 4value of element in modifyElement: 8array[3] after modifyElement: 4
Orientação a Objeto Java 32Renê Furtado Felix
Arrays multidimensionais
Arrays com duas dimensões usadas para representar tabelas de valores organizadas em linhas e colunas.
Para identificar, devemos especificar dois índices.
Por convenção o primeiro identifica a linha do elemento e o segundo sua coluna.
int [ ] [ ] b = { {1,2}, {3,4}};
Orientação a Objeto Java 33Renê Furtado Felix
Arrays multidimensionaisExemplo mais comum para demonstrar a execução 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");}
} }
Orientação a Objeto Java 34Renê Furtado Felix
Arrays multidimensionaisArrays bidimensionais, são bem flexíveis, 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 expressões de criação de array.
Int [ ] [ ] b = new int[ 3 ] [ 4 ];//Valores 3 e 4 para especificar o número de linhas e números de colunas.
Pode-se criar um array multidimensional em que cada linha tem um número 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
Orientação a Objeto Java 35Renê Furtado Felix
Arrays multidimensionaisExemplo 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 linhaSystem.out.println("\nValues in array2 by row are");outputArray( array2 );}//exibe array2 por linhapublic static void outputArray(int[ ][ ] array){//faz um loop pelas linhas do arrayfor (int row = 0; row < array.length; row ++) {//faz um loop pelas colunas da linha atualfor (int column = 0; column < array[row].length; column++)System.out.printf("%d", array[ row ] [ column ] );System.out.println();}}}//inicia nova linha de saída
Orientação a Objeto Java 36Renê Furtado Felix
Arrays multidimensionaisExemplo 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
Orientação a Objeto Java 37Renê Furtado Felix
ArraysList
Orientação a Objeto Java 38Renê Furtado Felix
ArraysList
Arrays não alteram automaticamente seu tamanho em tempo de execução para acomodar elementos adicionais.A coleção classe ArrayList <T> (do pacote java.util) fornece uma solução conveniente para este problema – poder alterar dinamicamente seu tamanho para acomodar mais elementos. Exemplo:ArrayList< String > list;Declara list como uma coleção ArrayList que só pode armazenar Strings.
Vamos ver alguns métodos comuns do ArrayList:
Orientação a Objeto Java 39Renê Furtado Felix
ArraysListMétodos Descriçãoadd Adiciona um elemento ao final do ArrayList.
clear Remove todos os elementos do ArrayList.
contains Retorna verdadeiro se o ArrayList contém o elemento especificado, caso contrário, retorna falso.
get Retorna o elemento do índice especificado.
indexOf Retorna o índice da primeira ocorrência do elemento especificado no ArrayList.
remove Remove a primeira ocorrência do valor especificado.
remove Remove o elemento no índice especificado.
size Retorna o número de elementos armazenados na ArrayList.
toArray() Retorna um array contendo os objetos na coleção.
trimToSize Arranja a capacidade do ArrayList para o número atual de elementos.
Orientação a Objeto Java 40Renê 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
//cabeçalho
Orientação a Objeto Java 41Renê Furtado Felix
ArraysList
8 System.out.println("Mostra o conteúdo da lista com laço 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 método display
11 display(items, "\nMostra o conteúdo da lista com instrução for aprimorada");
12 items.add("green");//adiciona green no final da lista
13 items.add("yellow");//adiciona yellow no final da lista
Orientação a Objeto Java 42Renê Furtado Felix
ArraysList
14 display(items, "Lista com dois novos elementos:");
15 items.remove("yellow");//remove o primeiro yellow
display(items, "Remover primeira instância 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
Orientação a Objeto Java 43Renê 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 cabeçalho//exibe cada elemento nos itens
24 for (String item:items)
25 System.out.printf(" %s", item);
26 System.out.println();
}}
Orientação a Objeto Java 44Renê Furtado Felix
......JAVA......
Dúvidas
Orientação a Objeto Java 45Renê Furtado Felix
BIBLIOGRAFIA
•Introdução ao Java, Daniel Destro do Carmo
•Use a Cabeça Java, Kathy Sierra e Bert Bates
•Certificação Sun para Programador Java 6, Kathy Sierra e Bert Bates