Post on 15-Apr-2016
description
Princpios de programao: Estrutura de dados (resumo) Arthur de Miranda Neto
1
2
Neste curso?
Estruturas de dados, na forma de um grupo de posies contguas na memria, com valores de mesmo nome e mesmo tipo.
Arrays
3
Estruturas de dados, na forma de um grupo de posies contguas na memria, com valores de mesmo nome e mesmo tipo.
Arrays so, portanto, a forma pela qual se armazenam vetores de tipos.
Arrays
4
Estruturas de dados, na forma de um grupo de posies contguas na memria, com valores de mesmo nome e mesmo tipo.
Arrays so, portanto, a forma pela qual se armazenam vetores de tipos.
Os arrays so estruturas estticas, isto , uma vez criados mantm seu tamanho inicial.
Arrays
5
Estruturas de dados, na forma de um grupo de posies contguas na memria, com valores de mesmo nome e mesmo tipo.
Arrays so, portanto, a forma pela qual se armazenam vetores de tipos.
Os arrays so estruturas estticas, isto , uma vez criados mantm seu tamanho inicial.
Para estruturas dinmicas a Linguagem Java possui classes especiais (classes Vector e Array)
Arrays
6
Estruturas de dados, na forma de um grupo de posies contguas na memria, com valores de mesmo nome e mesmo tipo.
Arrays so, portanto, a forma pela qual se armazenam vetores de tipos.
Os arrays so estruturas estticas, isto , uma vez criados mantm seu tamanho inicial.
Para estruturas dinmicas a Linguagem Java possui classes especiais (classes Vector e Array)
Os elementos de um array so encontrados pela referncia do nome do array e pelo nmero da posio em que se encontra (tambm chamada ndice ou subscrito).
Arrays
7
C [ 0 ] - 128
C [ 1 ] 8
C [ 2 ] 0
C [ 3 ] 82
C [ 4 ] 64
C [ 5 ] - 12
C [ 6 ] 65
C [ 7 ] 43
C [ 8 ] 76
C [ 9 ] 11
C [ 10 ] 0
Nome do array (todos os elementos do vetor
Nmero da posio do elemento
dentro de um array (ndice ou
subscrito)
...
public static void main (String args[]) {
int c = new int [11];
...
c = { - 128,8,0,82,64, - 12,65,43,76,11};
// c[11] zero por default (inicializao)
...
c[4] += c[2]; // c[4] = 64 + 0 = 64
}
Arrays
8
Arrays em Java (como em C e C++) iniciam pela posio zero. Portanto, um array c de trs elementos tem as posies c[0], c[1] e c[2].
Arrays
9
Arrays em Java (como em C e C++) iniciam pela posio zero. Portanto, um array c de trs elementos tem as posies c[0], c[1] e c[2].
Para se encontrar o elemento de um array se usa o nome do array, seguido do subscrito (i.e., posio desejada), entre colchetes.
Arrays
10
Arrays em Java (como em C e C++) iniciam pela posio zero. Portanto, um array c de trs elementos tem as posies c[0], c[1] e c[2].
Para se encontrar o elemento de um array se usa o nome do array, seguido do subscrito (i.e., posio desejada), entre colchetes.
Os ndices ou subscritos so valores inteiros e pode ser tratado como expresso de clculo (lvalue). Por exemplo: c [ x + 2] = 3; se x vale 6, o nono elemento do array (c[8]) receber o valor 3.
Arrays
11
Arrays so objetos que ocupam espaos contguos de memria.
int c[] ; // declarao do array
c = new int [ 12] ; // declarao e reserva de espao do do array
Arrays
12
Arrays so objetos que ocupam espaos contguos de memria.
int c[] ; // declarao do array
c = new int [ 12] ; // declarao e reserva de espao do do array
Arrays podem ser declarados e inicializados ao mesmo tempo:
int c[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} ;
Arrays
13
Arrays so objetos que ocupam espaos contguos de memria.
int c[] ; // declarao do array
c = new int [ 12] ; // declarao e reserva de espao do do array
Arrays podem ser declarados e inicializados ao mesmo tempo:
int c[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} ;
Quando os arrays so declarados sem inicializao, o Java faz a inicializao para zeros (variveis numricas), false (variveis lgicas do tipo boolean ) ou null para referncias a tipos de objetos.
Arrays
14
Mtodos (ou funes) podem receber parmetros tanto por chamada por valor como por chamada por referncia.
Informaes complementares
15
Mtodos (ou funes) podem receber parmetros tanto por chamada por valor como por chamada por referncia.
Passagem por valor: o mtodo recebe uma cpia do valor original e no alteram o valor original do argumento passado ao mtodo.
Informaes complementares
16
Mtodos (ou funes) podem receber parmetros tanto por chamada por valor como por chamada por referncia.
Passagem por valor: o mtodo recebe uma cpia do valor original e no alteram o valor original do argumento passado ao mtodo.
Passagem por referncia o mtodo recebe a localizao da varivel original e altera o prprio argumento originalmente passado ao mtodo. H um maior desempenho, pois elimina a necessidade de cpias de valores.
Informaes complementares
17
Em Java o programador no pode decidir como deseja trabalhar os parmetros dos mtodos. A regra geral :
Informaes complementares
18
Em Java o programador no pode decidir como deseja trabalhar os parmetros dos mtodos. A regra geral :
Tipos Primitivos: Passagem por cpia, argumentos de tipos da linguagem so sempre passados por cpia de valor e o return do mtodo sempre retorna uma cpia de valor.
Informaes complementares
19
Em Java o programador no pode decidir como deseja trabalhar os parmetros dos mtodos. A regra geral :
Tipos Primitivos: Passagem por cpia, argumentos de tipos da linguagem so sempre passados por cpia de valor e o return do mtodo sempre retorna uma cpia de valor.
Objetos so passados por referncia: objetos de classes so sempre passados por referncia. Isso significa que um objeto no passado para mtodo mas sim sua referncia. Isso significa que o mtodo sempre manipula diretamente o objeto.
Informaes complementares
20
int array[] = {1,2,3,4,5}
Passagem por cpia: deve-se passar o elemento de determinada possio do array;
modificaElemento(array[3]);
Arrays
21
int array[] = {1,2,3,4,5}
Passagem por cpia: deve-se passar o elemento de determinada possio do array;
modificaElemento(array[3]);
Passagem por referncia: deve-se especificar o nome do array sem nenhum colchetes.
modificaElemento(array);
Arrays
22
Permitem representar estruturas mais complexas, tais como tabelas (bidimensional) ou de maior ordem;
Arrays Multidimensionais
23
Permitem representar estruturas mais complexas, tais como tabelas (bidimensional) ou de maior ordem;
Para identificar um elemento especfico da tabela devemos especificar dois ndices (subscritos) - o primeiro identifica a linha e o segundo a coluna (bidimensional);
Arrays Multidimensionais
24
int array1[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
int array2[][] = { { 1, 2 }, { 3 }, { 4, 5, 6 } };
int b[][];
b = new int [3][4];
String[][] Sensores = {
{ Acelermetro Bssola Odmetro " },
{ Giroscpio Cmera 1", " Cmera Etc " },
};
Coluna 0 Coluna 1 Coluna 2 Coluna 3
Linha 0 a [0] [0] a [0] [1] a [0] [2] a [0] [3]
Linha 1 a [1] [0] a [1] [1] a [1] [2] a [1] [3]
Linha 2 a [2] [0] a [2] [1] a [2] [2] a [2] [3]
Nome do array
ndice da linha
ndice da coluna
Arrays Multidimensionais
25
Armazenando Objetos
26
Armazenando Objetos
Qualquer programa no-trivial cria objetos para os quais no h referncias explicitas.
27
Armazenando Objetos
Qualquer programa no-trivial cria objetos para os quais no h referncias explicitas.
Estruturas de Dados servem exatamente para armazenar estes objetos
Diferentes estruturas de dados
28
Armazenando Objetos
Qualquer programa no-trivial cria objetos para os quais no h referncias explicitas.
Estruturas de Dados servem exatamente para armazenar estes objetos
Diferentes estruturas de dados
Java contm uma srie de estrutura de dados em java.util
29
Arrays Containers
Arrays so um objeto especial de Java, com sintaxe especialmente definida:
int A[] = new int[10];
fortemente tipado
30
Arrays Containers
Arrays so um objeto especial de Java, com sintaxe especialmente definida:
int A[] = new int[10];
fortemente tipado
Containers so objetos comuns
parte do pacote java.util
fracamento tipado (usa Object)
31
Containers
32
Tipagem Fraca
Voc perde a informao sobre tipo quando voc coloca um objeto no container.
33
Tipagem Fraca
Voc perde a informao sobre tipo quando voc coloca um objeto no container.
Portanto, no h restrio ao tipo de objeto que pode ser colocado em um certo container.
34
Tipagem Fraca
Voc perde a informao sobre tipo quando voc coloca um objeto no container.
Portanto, no h restrio ao tipo de objeto que pode ser colocado em um certo container.
Portanto, ao retirar um objeto de um container, voc precisa caste-lo para o tipo correto.
35
Deque: inseres e remoes so permitidas apenas nas extremidades da lista;
Pilha: Inseres e remoes so realizadas em apenas um extremo;
Fila: inseres realizadas em um extremo e remoes em outro.
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
36
List
ArrayList um array que cresce por demanda
bom para acesso randmico
37
List
LinkedList uma lista duplamente encadeada
bom para alteraes no meio da lista
38
Map
Um Map guarda um objeto em associao com uma chave
A pesquisa feita pela chave, que nica.
Um Map um array associativo.
39
Map
HashMap implementa Map usando hash dinmico (rpido e desordenado)
TreeMap implementa Map usando rvore vermelho-preta e ordenado)
40
Iterator
Um Iterator uma abstrao que permite percorrer um container sem saber seu tipo.
41
Iterator
Obtm-se um iterator atravs do mtodo iterator() do container.
next() retorna o prximo objeto.
hasNext() retorna se h um prximo objeto.
remove() apaga o ltimo elemento retornado.
42
Iterator: Exemplo
class Sensor { static void startAll( Iterator e ) { while( e.hasNext() ){ System.out.println(e.next()); } }
}
43
ArrayList
44
Desvantagens:
S trabalha com objetos (e no com tipos bsicos)
Pode-se ter um ArrayList de Integer, mas no se pode ter um ArrayList de int.
ArrayList
45
Define um ArrayList de Strings:
ArrayList list = new ArrayList();
capacidade inicial default 10.
Define um ArrayList de Sensor:
ArrayList sensores
= new ArrayList( 20 );
capacidade inicial 20.
ArrayList
46
Substituindo (ou setando) um elemento em uma determinada posio:
list.set
ArrayList
47
Substituindo (ou setando) um elemento em uma determinada posio:
list.set
Retornando um elemento de uma posio:
System.out.println(list.get(12));
String s = list.get(5);
ArrayList
48
Inserindo um elemento no final do ArrayList
list.add ;
list.add ;
list.add ;
est na posio 0, est na posio 1, e est na posio 2.
ArrayList
49
Inserindo um elemento em uma determinada posio
i deve ser uma posio usada ou a primeira posio livre
list.add ;
list.add ;
list.add ;
list.add(1, ;
est na posio 0, Fred est na posio 1, est na posio 2, e est na posio 3.
ArrayList
50
Retornando tamanho da lista (quantidade de ns na lista):
Mtodo size()
for (int i=0; i
Adicionar elementos:
public void add (int index, Base_Type newElement )
0
Remover elementos:
public Base_Type remove (int index )
0
Remove elementos:
public boolean remove(Object theElement)
se encontrada, remove a primeira ocorrncia de theElement; copia para a esquerda os elementos restantes;
size() se torna size()-1;
Retorna true.
Se no encontrada, retorna false.
Ex: boolean b = list.remove ;
Mtodos da classe ArrayList
54
Remove elementos:
public void clear( )
remove todos os elementos;
size() se torna 0
Ex: list.clear();
Mtodos da classe ArrayList
55
Mtodos de Procura
public boolean contains(Object target)
chama o mtodo equals() de target
true se ArrayList contm target; false caso contrrio.
Ex: boolean b = list.contains ;
Mtodos da classe ArrayList
56
Mtodos de Procura
public int indexOf (Object target)
chama o mtodo equals() de target
retorna ndice (posio) da primeira ocorrncia de target em ArrayList; -1 caso contrrio.
Ex: int pos = list.indexOf ;
Mtodos da classe ArrayList
57
Mtodos de Procura
public int lastIndexOf(Object target)
realiza o mesmo que o anterior, com a diferena que retornada a posio da ltima ocorrncia.
Ex: int pos = list.lastIndexOf ;
Mtodos da classe ArrayList
58
Gerenciamento da memria (tamanho / capacidade)
public boolean isEmpty( )
true se vazio; false caso contrrio.
Ex: boolean b = list.isEmpty();
Mtodos da classe ArrayList
59
Gerenciamento da memria (tamanho / capacidade)
public int size( )
retorna nmero de elementos (ns) em ArrayList
Ex: int tam = list.size();
Mtodos da classe ArrayList
60
Gerenciamento da memria (tamanho / capacidade)
public void ensureCapacity(int newCapacity)
aumenta a capacidade (se necessrio)
Ex: list.ensureCapacity(20);
Mtodos da classe ArrayList
61
Gerenciamento da memria (tamanho / capacidade)
public void trimToSize( )
reduz a capacidade para tamanho atual
Ex: list.trimToSize();
Mtodos da classe ArrayList
62
Cpia:
public Object[] toArray( )
retorna um array contendo os elementos da lista.
Ex: Object[] v = list.toArray();
Mtodos da classe ArrayList
63
Cpia:
public Object[] toArray( )
retorna um array contendo os elementos da lista.
Ex: Object[] v = list.toArray();
public Object clone( )
retorna uma cpia de ArrayList.
Ex: Object v = list.clone();
Mtodos da classe ArrayList
64
Igualdade:
public boolean equals (Object other)
verdadeiro somente se ambos possuem o mesmo nmero de elementos e os mesmos elementos (na mesma ordem).
compara cada par de elementos chamando seu mtodo equals()
Ex: boolean b = list.equals(list2);
Mtodos da classe ArrayList
65
http://www.ime.usp.br/~cosen/verao/alg.pdf http:// java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html outros esto disponveis na internet
66
http://www.ime.usp.br/~cosen/verao/alg.pdfhttp://www.ime.usp.br/~cosen/verao/alg.pdfhttp://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.htmlhttp://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html