Você está na página 1de 66

Princpios de programao:

Estrutura de dados (resumo)


Arthur de Miranda Neto

Neste curso?

Arrays

Estruturas de dados, na forma de um grupo de


posies contguas na memria, com valores de
mesmo nome e mesmo tipo.

Arrays

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


armazenam vetores de tipos.

pela

qual

se

Arrays

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

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

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).
7

Arrays
Nome do array (todos os elementos do vetor
passam a ter o mesmo nome: c)

C [ 0 ]

- 128

C [ 1 ]

C [ 2 ]

C [ 3 ]

82

C [ 4 ]

64

C [ 5 ]

- 12

C [ 6 ]

65

C [ 7 ]

43

C [ 8 ]

76

C [ 9 ]

11

C [ 10 ]

...
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

Nmero da posio do elemento


dentro de um array (ndice ou
subscrito)
8

Arrays

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

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.

10

Arrays

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.
11

Arrays

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

12

Arrays

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

13

Arrays

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.
14

Informaes complementares

Mtodos (ou funes) podem receber parmetros tanto por


chamada por valor como por chamada por referncia.

15

Informaes complementares

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.

16

Informaes complementares

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.
17

Informaes complementares

Em Java o programador no pode decidir como deseja


trabalhar os parmetros dos mtodos. A regra geral :

18

Informaes complementares

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.

19

Informaes complementares

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.
20

Arrays
int array[] = {1,2,3,4,5}

Passagem por cpia: deve-se passar o elemento de


determinada possio do array;
modificaElemento(array[3]);

21

Arrays
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);
22

Arrays Multidimensionais

Permitem representar estruturas mais complexas, tais


como tabelas (bidimensional) ou de maior ordem;

23

Arrays Multidimensionais

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

24

Arrays Multidimensionais
Coluna 0
Linha 0 a [0] [0]
Linha 1 a [1] [0]
Linha 2 a [2] [0]

Coluna 1
a [0] [1]
a [1] [1]
a [2] [1]

Coluna 2 Coluna 3
a [0] [2] a [0] [3]
a [1] [2] a [1] [3]
a [2] [2] a [2] [3]
ndice da coluna

ndice da linha
Nome do array

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", GPS", ...", Odmetro" },
{ Giroscpio", Cmera 1", " Cmera 2", Etc" },
};
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;
1

Pilha: Inseres e remoes so realizadas em


apenas um extremo;
1

Fila: inseres realizadas em um extremo e


remoes em outro.
1

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
(lento 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

ArrayList

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.

45

ArrayList
Define um ArrayList de Strings:
ArrayList<String> list = new ArrayList<String>();
capacidade inicial default 10.
Define um ArrayList de Sensor:
ArrayList<Sensor> sensores
= new ArrayList<Sensor>( 20 );
capacidade inicial 20.
46

ArrayList
Substituindo (ou setando) um elemento em uma
determinada posio:
list.set(12, GPS 11);

47

ArrayList
Substituindo (ou setando) um elemento em uma
determinada posio:
list.set(12, GPS 11);
Retornando um elemento de uma posio:
System.out.println(list.get(12));
String s = list.get(5);

48

ArrayList
Inserindo um elemento no final do ArrayList
list.add(One);
list.add(Two);
list.add(Three);
One est na posio 0, Two est na posio 1, e
Three est na posio 2.

49

ArrayList
Inserindo um elemento em uma determinada posio
i deve ser uma posio usada ou a primeira posio
livre
list.add(One);
list.add(Two);
list.add(Three);
list.add(1, Fred);
One est na posio 0, Fred est na posio 1,
Two est na posio 2, e Three est na posio 3.
50

ArrayList
Retornando tamanho da lista (quantidade de ns na
lista):
Mtodo size()
for (int i=0; i<list.size(); i++) {
System.out.println( list.get(i) );
}

51

Mtodos da classe ArrayList


Adicionar elementos:

public void add (int index, Base_Type newElement )


0<=index<=size()
se index==size(), insere no final
size() cresce em 1

Capacidade aumenta se necessrio


Ex: list.add(0, GPS);
52

Mtodos da classe ArrayList


Remover elementos:
public Base_Type remove (int index )
0<=index<size() (ou exceo)
remove o elemento na posio index; copia para
as posies esquerda os elementos restantes em
index+1 size()-1.
Ex: String s = list.remove(2);
53

Mtodos da classe ArrayList


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


54

Mtodos da classe ArrayList


Remove elementos:
public void clear( )

remove todos os elementos;


size() se torna 0
Ex: list.clear();

55

Mtodos da classe ArrayList


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

56

Mtodos da classe ArrayList


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

Mtodos da classe ArrayList


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

58

Mtodos da classe ArrayList


Gerenciamento da memria (tamanho / capacidade)
public boolean isEmpty( )
true se vazio; false caso contrrio.

Ex: boolean b = list.isEmpty();

59

Mtodos da classe ArrayList


Gerenciamento da memria (tamanho / capacidade)
public int size( )
retorna nmero de elementos (ns) em ArrayList

Ex: int tam = list.size();

60

Mtodos da classe ArrayList


Gerenciamento da memria (tamanho / capacidade)
public void ensureCapacity(int newCapacity)
aumenta a capacidade (se necessrio)

Ex: list.ensureCapacity(20);

61

Mtodos da classe ArrayList


Gerenciamento da memria (tamanho / capacidade)
public void trimToSize( )
reduz a capacidade para tamanho atual

Ex: list.trimToSize();

62

Mtodos da classe ArrayList


Cpia:
public Object[] toArray( )
retorna um array contendo os elementos da lista.
Ex: Object[] v = list.toArray();

63

Mtodos da classe ArrayList


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


64

Mtodos da classe ArrayList


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

Você também pode gostar