Aula 2 2
-
Upload
iftm-instituto-federal-de-educacao-ciencia-e-tecnologia-do-triangulo-mineiro -
Category
Technology
-
view
21 -
download
0
Transcript of Aula 2 2
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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