2. Objetivos da Aula
Estruturas de dados;
Arrays (Vetores);
Listas (ArrayList e LinkedList).
2
3. Estruturas de dados
Até o presente momento, em Java, sabemos armazenar
somente uma unidade de informação por vez, em uma
variável;
Em Java, uma variável possui tipo estático, podendo ser
armazenada nela somente um dado de determinado tipo;
Esse tipo pode ser int, double, boolean, dentre outros, além
de objetos de qualquer classe existente no Java ou criada
pelo desenvolvedor.
3
4. Estruturas de dados
A variável não é nada além de uma referência para uma
posição na memória do computador:
4
e1 teste c1
objeto true objeto
objeto 2 3.1415
p1 x pi
5. Estruturas de dados
Variáveis permitirão o armazenamento somente de um dado;
Para armazenar mais dados, é necessário criar mais
variáveis, o que gera um problema de controle nas
referências;
Além disso, quando não se sabe exatamente a quantidade de
dados a ser armazenada, o problema é ainda maior, e fica
ainda mais inviável a utilização de variáveis.
5
6. Estruturas de dados
Neste caso, as estruturas de dados podem ajudar a
armazenar mais dados, com todos possuindo uma única
referência;
O que mudará de um dado para o outro será a sua posição
dentro da estrutura;
Em Java, uma estrutura pode armazenar somente dados de
um único tipo, pré-definido em sua criação;
Os tipos possíveis obedecem às mesmas regras dos tipos
das variáveis.
6
7. Vetores (Arrays)
Vetores servem para armazenar uma quantidade fixa de
valores de um determinado tipo;
Em Java, não é possível adicionar ou remover elementos de
um vetor. Pode-se apenas substituir seus elementos;
Sua estrutura dentro da memória se dá de maneira
sequencial;
Ex: Um vetor de números inteiros {1, 2, 3, 4, 5};
7
1 2
3 4 5
Começo
8. Criação de Vetores
Criação de um vetor não inicializado:
tipo[] refvetor = new tipo[tamanho];
*O vetor terá valores padrões dependendo do tipo.
Ex: int[] vetor = new int[5];
Criação de um vetor inicializado:
tipo[] refvetor = new tipo[]{ele1, ele2, ..., eleN};
*O vetor terá tamanho igual a quantidade de elementos
colocados;
*Todos os valores deverão ser do mesmo tipo do vetor;
Ex: int[] vetor = new int[]{1,2,3,4,5}.
8
9. Manipulação dos elementos de
um vetor
Obtendo o elemento armazenado em uma posição:
refvetor[pos];
*0 <= pos < tamanho do vetor;
Ex: vetor[3] 4.
Mudando o elemento armazenado em uma posição:
refvetor[pos] = valor;
*0 <= pos < tamanho do vetor;
*valor deve ser do mesmo tipo do vetor;
Ex: vetor[3] = 10 {1, 2, 3, 10, 5};
9
10. Mostrando um vetor na tela
Para mostrar um vetor na tela, proceda da seguinte maneira:
1. Importe a biblioteca java.util.Arrays;
2. Digite: System.out.println(Arrays.toString(REF. VETOR));
Se o elemento do vetor for um objeto, Arrays.toString
invocará o método toString do objeto. 10
11. Vetores de objetos de uma classe
Para criar objetos e utilizá-los na estrutura de um vetor, foi
criada uma classe chamada Cachorro e seu método
toString():
11
12. Vetores de objetos de uma classe
Quando um vetor de objetos for criado, de maneira não
inicializada, todas as posições vão conter o valor nulo;
12
13. Vetores de objetos de uma classe
Assim sendo, substitua as posições com os objetos
armazenados, sempre começando pelo índice 0. Basta
verificar qual posição é nula para adicionar;
Adicionando 4 objetos no array:
13
14. Vetores de objetos de uma classe
Para remover um objeto de uma posição, pegue todos os
objetos à direita dele e desloque uma posição para a
esquerda, partindo da posição removida.
A última posição a possuir um objeto deverá ser modificado
para nulo;
Porém, se o vetor estiver cheio, a condição acima não será
satisfeita. Assim sendo, veja se a repetição chegou ao final.
Se chegou, desloque o último objeto e coloque a última
posição como nulo.
14
16. Vetores de objetos de uma classe
Resultado da remoção do elemento no índice 1:
É de responsabilidade do desenvolvedor o gerenciamento da
estrutura de arrays;
Com estas operações já é possível garantir a integridade da
estrutura.
16
17. Listas (LinkedList e ArrayList)
Diferente dos vetores, listas servem para armazenar uma
quantidade variável de valores de um tipo;
É possível adicionar ou remover elementos de uma lista, bem
como substituir o elemento de determinada posição;
Sua estrutura dentro da memória é gerenciada através de
ponteiros, não necessitando de ser sequencial;
Ex: Uma lista de números inteiros (1, 2, 3, 4, 5);
17
4 5 1
3 2
Começo
18. Listas (LinkedList e ArrayList)
Em Java, uma lista pode ser implementada via LinkedList ou
ArrayList;
Estas vias possuem suas particularidades quanto a custo de
memória, implementação e custo para as operações, porém
são criadas de maneira semelhante e manipuladas de
maneira idêntica;
Será demonstrada apenas a LinkedList, porém, caso queira
implementar uma ArrayList, basta somente substituir os
nomes das classes na criação. Os métodos mostrados aqui
são iguais para ambas implementações.
18
19. Importando classe LinkedList
Para utilizar LinkedList, a primeira coisa a fazer é importar a
classe no começo do arquivo Java:
Isto deve ser feito em qualquer arquivo que listas forem
manipuladas.
19
20. Criação de uma LinkedList
Sintaxe:
LinkedList<tipo> reflista = new LinkedList<tipo>();
*tipo definirá qual tipo de dado poderá ser armazenado na
LinkedList Tipos primitivos não podem ser usados;
*Os tipos devem ser iguais: Da referência e da LinkedList
criada;
A primeira posição possui índice 0.
20
21. Tipos da LinkedList
Como uma LinkedList não pode conter tipos primitivos,
somente classes podem ser especificados como tipos;
Porém, os tipos primitivos também possuem classes
correspondentes:
int Integer;
double Double;
boolean Boolean.
21
22. Mostrando a LinkedList na tela
Para mostrar uma LinkedList na tela, proceda como se fosse
um objeto normal:
A LinkedList já possui sua implementação de toString;
Integer, Double e Boolean já possuem a implementação
correta do método toString;
Os objetos presentes na LinkedList terão seus métodos
toString invocados. Portanto, sempre contrua-o.
22
23. Adicionando elementos em uma
LinkedList
Para adicionar um elemento ao final da LinkedList:
reflista.add(elemento);
Ex: alunos.add(“João”); [“João”];
Ex: alunos.add(“Ana”); [“João”, “Ana”];
Ex: alunos.add(“João”); [“João”, “Ana”, “João”];
Para adicionar um elemento em uma posição específica:
reflista.add(pos, elemento);
*0 <= pos <= tamanho da lista.
Ex: alunos.add(1, “Juca”); [“João”, “Juca”, “Ana”, “João”];
O elemento será inserido e todos os elementos posteriores serão
deslocados para direita.
23
24. Obtendo o tamanho de uma
LinkedList
Para saber o tamanho de uma LinkedList:
reflista.size();
Ex: alunos.size(); 4;
Use o tamanho para controlar a LinkedList, e impedir que
posições inválidas sejam inseridas no sistema;
Muito importante para verificar se determinada posição
possui um elemento para ser recuperado ou removido, ou se
é possível adicionar um elemento lá.
24
25. Recuperando elementos de uma
LinkedList
Para recuperar um elemento de uma posição da LinkedList:
reflista.get(pos);
*0 <= pos < tamanho da lista.
Ex: alunos.get(1); “Juca”;
Ex: alunos.get(2); “Ana”;
25
26. Removendo elementos de uma
LinkedList
Para remover um elemento de uma LinkedList por posição:
reflista.remove(pos);
*0 <= pos < tamanho da lista.
Ex: alunos.remove(2); [“João”, “Juca”, “João”];
Para remover um elemento de uma LinkedList por elemento:
reflista.remove(elemento);
*Remove somente a primeira instância encontrada do elemento;
Ex: alunos.remove(“João”); [“Juca”, “João”];
*Retorna true ou false se removeu ou não o elemento
respectivamente Pode ser usado em verificações.
26
27. Estude e pratique este
conteúdo, uma vez que
estruturas de dados são peças
chave nos relacionamentos
interclasse.
27