Aula7 Array e ArrayList

45
Array ou Matriz & ArrayList Renê Furtado Felix rff[email protected]

Transcript of Aula7 Array e ArrayList

Page 1: Aula7 Array e ArrayList

Array ou Matriz & ArrayList

Renê Furtado [email protected]

Page 2: Aula7 Array e ArrayList

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 ];

Page 3: Aula7 Array e ArrayList

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:

Page 4: Aula7 Array e ArrayList

Orientação a Objeto Java 4Renê Furtado Felix

Array

Introdução

Page 5: Aula7 Array e ArrayList

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.

Page 6: Aula7 Array e ArrayList

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;

Page 7: Aula7 Array e ArrayList

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.

Page 8: Aula7 Array e ArrayList

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;

Page 9: Aula7 Array e ArrayList

Orientação a Objeto Java 9Renê Furtado Felix

Page 10: Aula7 Array e ArrayList

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

Page 11: Aula7 Array e ArrayList

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.

Page 12: Aula7 Array e ArrayList

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

Page 13: Aula7 Array e ArrayList

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 ]);

}

}

Page 14: Aula7 Array e ArrayList

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

Page 15: Aula7 Array e ArrayList

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:

Page 16: Aula7 Array e ArrayList

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]);

}

}

Page 17: Aula7 Array e ArrayList

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

Page 18: Aula7 Array e ArrayList

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.

Page 19: Aula7 Array e ArrayList

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]);

} }

Page 20: Aula7 Array e ArrayList

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

Page 21: Aula7 Array e ArrayList

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

Page 22: Aula7 Array e ArrayList

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

} } }

Page 23: Aula7 Array e ArrayList

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: *

Page 24: Aula7 Array e ArrayList

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.

Page 25: Aula7 Array e ArrayList

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]);}}

Page 26: Aula7 Array e ArrayList

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

Page 27: Aula7 Array e ArrayList

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.

Page 28: Aula7 Array e ArrayList

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

Page 29: Aula7 Array e ArrayList

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]);

Page 30: Aula7 Array e ArrayList

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); } }

Page 31: Aula7 Array e ArrayList

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

Page 32: Aula7 Array e ArrayList

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}};

Page 33: Aula7 Array e ArrayList

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");}

} }

Page 34: Aula7 Array e ArrayList

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

Page 35: Aula7 Array e ArrayList

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

Page 36: Aula7 Array e ArrayList

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

Page 37: Aula7 Array e ArrayList

Orientação a Objeto Java 37Renê Furtado Felix

ArraysList

Page 38: Aula7 Array e ArrayList

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:

Page 39: Aula7 Array e 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.

Page 40: Aula7 Array e ArrayList

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

Page 41: Aula7 Array e ArrayList

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

Page 42: Aula7 Array e ArrayList

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

Page 43: Aula7 Array e ArrayList

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();

}}

Page 44: Aula7 Array e ArrayList

Orientação a Objeto Java 44Renê Furtado Felix

......JAVA......

Dúvidas

Page 45: Aula7 Array e ArrayList

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