O documento apresenta os principais tipos de estruturas de dados estáticas e dinâmicas, como vetores, listas ligadas, filas, pilhas e árvores. Explica como implementar uma lista ligada simples com duas classes, No e Lista. Também discute métodos genéricos, classes genéricas e como instanciá-las. Por fim, descreve as principais interfaces e classes de coleções do Java, como List, Set, Map e suas implementações LinkedList, ArrayList, HashSet, TreeSet, HashMap e TreeMap.
3. Estruturas de Dados
Estruturas de dados estáticas:
Variáveis;
Vetores (arrays).
Estruturas de dados dinâmicas:
Lista ligada;
Fila;
Pilha;
Árvore.
3
5. Lista Ligada
O nó é definido por uma classe com atributos e um
ponteiro para outro nó (definido pela mesma classe);
A Lista Ligada implementa métodos para manipular
sua lista. Por exemplo:
Adicionar um novo nó;
Pesquisar por um nó;
Retirar um nó.
5
7. Árvore de Pesquisa Binária
Cada nó possui dois, um ou nenhum nó filho;
Inserção de um novo nó:
Se árvore vazia, insira um novo nó;
Se o novo nó é menor que a raiz da árvore atual, insira na
sub-árvore esquerda;
Se o novo nó é maior que a raiz da árvore atual, insira na
sub-árvore direita;
Ex: Inserir os seguintes valores na árvore e percorrer
em ordem: [27, 13, 42, 33, 17, 48, 6]
7
8. Árvore de Pesquisa Binária
A árvore pode ser percorrida em:
Na ordem;
Percorra sub-árvore esquerda;
Processe o nó;
Percorra a sub-árvore direita.
Pré-ordem;
Processe o nó;
Percorra sub-árvore esquerda;
Percorra a sub-árvore direita.
Pós-ordem.
Percorra sub-árvore esquerda;
Percorra a sub-árvore direita;
Processe o nó.
8
9. Implementando um Nó de Lista
Ligada
public class No public class Lista
{ {
public int dado; private No primeiro;
public No prox;
} public void inserePrimeiro
(int dado)
{
No aux = new No;
aux.dado = dado;
aux.prox = primeiro;
primeiro = aux;
}
}
9
11. Motivação
Tarefas semelhantes executadas em tipos diferentes
requerem sobrecarga (overload)
public static void imprime (double dado) {...}
public static void imprime (int dado) {...}
public static void imprime (String dado) {...}
11
12. Métodos Genéricos
Se o método imprime não usar características
específicas de dado, então um único método genérico
pode ser escrito:
public static <E> void imprime (E dado) {...}
Métodos genéricos podem usar um parâmetro de tipo
como retorno:
public static <E> E maior (E dado1, E dado2) {...}
O tipo E, nos dois casos, assume o tipo dos parâmetros
dos métodos.
12
13. Classes Genéricas
public class ClasseGenerica <E>
{
...
public static void imprime (E dado) {...}
public static E maior (E dado1, E dado2) {...}
...
}
13
14. Instanciando Classes Genéricas
...
ClasseGenerica <String> objetoTexto = new
ClasseGenerica <String>();
ClasseGenerica <Integer> objetoInteiro = new
ClasseGenerica <Integer>();
ClasseGenerica objeto = new ClasseGenerica();
...
14
16. API Collections
Collection
List Set
Array
Dimensionável
LinkedList ArrayList HashSet SortedSet
Tabela de
Lista
Ligada Hash TreeSet
Map
Árvore
Balanceada
HashMap SortedMap Iterator
Árvore
Tabela de Balanceada ListIterator
Hash TreeMap
16
17. Comentários sobre Estruturas de Dados
Arrays
Acesso a um determinado elemento através de seu índice é feito em
tempo constante.
Inserção e exclusão de novos elementos depende da quantidade de
elementos já existente no array.
Permite uso de busca binária, se o array estiver classificado, caso
contrário, exige busca seqüencial.
Listas Ligadas
Inserção e exclusão nas extremidades é feita em tempo
constante(pilhas e filas).
Busca seqüencial.
Tabelas de Hash
Busca, inserção e exclusão praticamente em tempo constante.
Os elementos não são classificados.
Árvores Binárias Balanceadas de Busca
Busca, inserção e exclusão em tempo logarítmico.
Os elementos são classificados.
17
18. Comentários sobre Estruturas de Dados
Listas (LinkedList e ArrayList)
Permitem duplicidade de elementos.
A ordem de inserção dos elementos é mantida.
Conjuntos (HashSet e TreeSet)
Não permitem duplicidade de elementos.
A ordem de inserção dos elementos não é mantida.
Mapas (HashMap e TreeMap)
Os elementos são associados a uma chave.
O acesso aos elementos é feito através da chave, e não através do
próprio elemento.
Não há duplicidade de chaves.
18
19. Interface Collection <E> (java.util.Collection)
Alguns Métodos
boolean add ( E elemento )
Adiciona um elemento à coleção.
void clear ( )
Remove todos os elementos da coleção.
boolean contains ( Object elemento )
Retorna true se o elemento estiver contido na coleção.
boolean isEmpty ( )
Retorna true se a coleção estiver vazia.
Iterator <E> iterator ( )
Retorna um iterador para a coleção.
boolean remove ( Object elemento )
Remove um elemento da coleção e o retorna.
int size ( )
Retorna a quantidade de elementos na coleção.
Object [ ] toArray ( )
Retorna os elementos da coleção na forma de um array.
19
20. Exemplo Interface List
import java.util.*;
public class ExemploList {
public static void main(String[] args) {
List<String> lista = new LinkedList<String>();
//List<String> lista = new ArrayList<String>();
lista.add("Maria");
lista.add("José");
lista.add("Joaquim");
System.out.println(lista.size() + " - " + lista);
lista.remove("José");
System.out.println(lista.size() + " - " + lista);
System.out.println("Primeiro nome: " + lista.get(0));
String nome = "Joaquim";
System.out.println(nome + " está na posição " + lista.indexOf(nome));
System.out.println(lista.size() + " - " + lista);
}
}
20
21. Classe LinkedList<E> (java.util.LinkedList)
Alguns Construtores
LinkedList ( )
LinkedList ( Collection c )
Alguns Métodos
void add ( int índice, E elemento )
Adiciona um elemento à lista.
void addFirst ( E elemento )
Adiciona um elemento no início da lista.
void addLast ( E elemento )
Adiciona um elemento no final da lista.
E element ( )
Retorna, mas não exclui, o elemento no início da lista.
E get ( int índice )
Retorna um elemento da lista.
21
22. Classe LinkedList<E> (java.util.LinkedList)
E getFirst ( )
Retorna o primeiro elemento da lista.
E getLast ( )
Retorna o último elemento da lista.
int indexOf ( Object elemento )
Retorna o índice da primeira ocorrência do elemento, -1 se o elemento não
estiver contido na lista.
ListIterator<E> listIterator ( )
Retorna o iterador da lista.
E remove ( int índice )
Remove um elemento da lista e o retorna.
E removeFirst ( )
Remove o primeiro elemento da lista e o retorna.
E removeLast ( )
Remove o último elemento da lista e o retorna.
E set ( int índice, E elemento )
Troca um elemento na lista.
22
23. Exemplo LinkedList
import java.util.*;
public class ExemploLinkedList {
public static void main(String[] args) {
LinkedList<String> lista = new LinkedList<String>();
lista.add("Maria");
lista.addFirst("José");
lista.add("Joaquim");
System.out.println(lista.size() + " - " + lista);
lista.removeFirst();
System.out.println(lista.size() + " - " + lista);
System.out.println("Último nome: " + lista.getLast());
String nome = "José";
System.out.println(nome + " está na posição " + lista.indexOf(nome));
}
}
23
24. Percurso em uma LinkedList
import java.util.*;
public class PercursoLinkedList {
public static void main(String[] args) {
LinkedList<String> lista = new LinkedList<String>();
lista.add("Maria"); lista.add("José"); lista.add("Joaquim");
// Percurso do início para o final
Iterator<String> item = lista.iterator();
while (item.hasNext()) {
System.out.println(item.next());
}
for (String elemento : lista) {
System.out.println(elemento);
}
// Percurso do final para o início
int tamanho = lista.size();
ListIterator<String> itemReverso = lista.listIterator(tamanho);
while (itemReverso.hasPrevious()) {
System.out.println(itemReverso.previous());
}
}
}
24
25. Classe ArrayList<E> (java.util.ArrayList)
Alguns Construtores
ArrayList ( )
ArrayList ( int capacidadeInicial )
Alguns Métodos
void add ( int índice, E elemento )
Adiciona um elemento à lista.
E get ( int índice )
Retorna um elemento da lista.
int indexOf ( Object elemento )
Retorna o índice da primeira ocorrência do elemento, -1 se o elemento
não estiver contido na lista.
E remove ( int índice )
Remove um elemento da lista e o retorna.
E set ( int índice, E elemento )
Troca um elemento na lista.
25
26. Classe HashSet<E> (java.util.HashSet)
Alguns Construtores
HashSet ( )
HashSet ( int capacidadeInicial )
Alguns Métodos
boolean add ( E elemento )
Adiciona um elemento à coleção.
boolean contains ( Object elemento )
Retorna true se o elemento estiver contido na coleção.
boolean isEmpty ( )
Retorna true se a coleção estiver vazia.
Iterator <E> iterator ( )
Retorna o iterador da coleção
boolean remove ( Object elemento )
Remove o elemento da coleção
int size ( )
Retorna a quantidade de elementos da coleção
26
27. Exemplo HashSet
import java.util.*;
public class ExemploHashSet {
public static void main(String[] args) {
HashSet<String> conjunto = new HashSet<String>();
conjunto.add("Maria");
conjunto.add("José");
conjunto.add("Joaquim");
conjunto.add("Maria");
System.out.println("Possui " + conjunto.size() + " elementos");
// Percurso em ordem INDETERMINADA
Iterator<String> item = conjunto.iterator();
while (item.hasNext()) {
System.out.println(item.next());
}
}
}
27
28. Classe TreeSet<E> (java.util.TreeSet)
Alguns Construtores
TreeSet ( )
TreeSet ( Comparator comparador )
Alguns Métodos
boolean add ( E elemento )
Adiciona um elemento à coleção.
void clear ( )
Remove todos os elementos da coleção.
boolean contains ( Object elemento )
Retorna true se o elemento estiver contido na coleção.
E first ( )
Retorna o primeiro elemento da coleção.
boolean isEmpty ( )
Retorna true se a coleção estiver vazia.
28
29. Classe TreeSet<E> (java.util.TreeSet)
Iterator <E> iterator ( )
Retorna o iterador da coleção
E last ( )
Retorna o último elemento da coleção.
boolean remove ( Object elemento )
Remove o elemento da coleção
int size ( )
Retorna a quantidade de elementos da coleção
29
30. Exemplo TreeSet
import java.util.*;
public class ExemploTreeSet {
public static void main(String[] args) {
TreeSet<String> conjunto = new TreeSet<String>();
conjunto.add("Maria");
conjunto.add("José");
conjunto.add("Joaquim");
conjunto.add("Maria");
System.out.println("Possui " + conjunto.size() + " elementos");
// Percurso em ordem crescente
Iterator<String> item = conjunto.iterator();
while (item.hasNext()) {
System.out.println(item.next());
}
}
}
30
31. Classe Collections (java.util.Collections)
void sort ( List lista )
Classifica os elementos de uma lista .
int binarySearch ( List lista, Object chavePesquisa )
Retorna o índice I da lista onde o elemento está, ou um valor negativo I
caso a chavePesquisa não seja encontrada. O elemento deve ser
inserido na posição (I + 1) * -1 para a lista continuar ordenada.
Object min (Collection coleção )
Retorna o menor elemento da lista.
Object max (Collection coleção )
Retorna o maior elemento da lista.
void copy ( List para, List de)
Copia todos os elementos de uma lista para outra.
void fill ( List lista, Object valor )
Define todas as posições de uma lista com um determinado valor.
void reverse ( List lista )
Inverte a ordem dos elementos na lista.
31
32. Interface Map<K, V> (java.util.Map)
Alguns Métodos
void clear ( )
Remove todos os mapeamentos do mapa.
boolean containsKey ( Object chave )
Retorna true se há algum elemento mapeado pela chave.
boolean containsValue ( Object valor )
Retorna true se há alguma chave mapeando o valor.
Set <Map.Entry <K, V>> entrySet( )
Retorna um Set contendo os valores mapeados.
V get ( Object chave )
Retorna o elemento mapeado pela chave. Ou null caso não exista.
boolean isEmpty ( )
Retorna true se o mapa estiver vazio.
Set <K> keySet ( )
Retorna um Set contendo as chaves do mapa.
V put ( K chave, V valor )
Associa um valor a uma chave no mapa.
32
33. Interface Map<K, V> (java.util.Map)
Alguns Métodos
V remove (Object chave)
Remove um mapeamento do mapa.
int size ( )
Retorna o número de pares chave-valor do mapa.
Collection V values ( )
Retorna uma Collection contendo os valores do mapa.
33
34. Percurso em um Map
import java.util.*;
public class ExemploMap {
static final String[] produtos = {"Laranja", "Melão", "Goiaba"};
public static void main(String[] args) {
Map<Integer, Integer> mapa = new HashMap<Integer, Integer>();
mapa.put(1, 5);
mapa.put(1, 2);
mapa.put(2, 3);
System.out.print("O carrinho possui " + mapa.size());
System.out.println(" produtos");
Set<Integer> carrinho = mapa.keySet();
Iterator<Integer> p = carrinho.iterator();
while (p.hasNext()) {
Integer item = p.next();
System.out.print("Produto: " + produtos[item]);
System.out.println(" Quantidade: " + mapa.get(item));
}
}
}
34
35. Classe HashMap<K, V> (java.util.HashMap)
Alguns Construtores
HashMap ( )
HashMap ( int capacidadeInicial )
Alguns Métodos
void clear ( )
Remove todos os elementos da coleção.
boolean containsKey ( Object chave )
Retorna true se há algum elemento mapeado pela chave.
boolean containsValue ( Object valor )
Retorna true se há alguma chave mapeando o valor.
<V> get ( Object chave )
Retorna o elemento mapeado pela chave. Ou null caso não exista.
boolean isEmpty ( )
Retorna true se a coleção estiver vazia.
35
36. Classe HashMap<K, V> (java.util.HashMap)
<V> put ( K chave, V valor )
Insere um mapeamento na coleção.
boolean remove ( Object chave )
Remove o elemento mapeado pela chave.
int size ( )
Retorna a quantidade de elementos da coleção.
Collection <V> values ( )
Retorna uma coleção contendo os valores da estrutura.
36
37. Classe TreeMap<K, V> (java.util.TreeMap)
Alguns Construtores
TreeMap ( )
TreeMap ( Comparator comparador )
Alguns Métodos
void clear ( )
Remove todos os elementos da coleção.
boolean containsKey ( Object chave )
Retorna true se há algum elemento mapeado pela chave.
boolean containsValue ( Object valor )
Retorna true se há alguma chave mapeando o valor.
<E> firstKey ( )
Retorna a primeira chave do mapa.
<V> get ( Object chave )
Retorna o elemento mapeado pela chave. Ou null caso não exista.
<E> lastKey ( )
Retorna a última chave do mapa.
37
38. Classe TreeMap<K, V> (java.util.TreeMap)
<V> put ( K chave, V valor )
Insere um mapeamento na coleção.
boolean remove ( Object chave )
Remove o elemento mapeado pela chave.
int size ( )
Retorna a quantidade de elementos da coleção.
Collection <V> values ( )
Retorna uma coleção contendo os valores do mapa.
38
39. Classe Properties (java.util.Properties)
Construtores
Properties ( )
Properties ( Properties valoresPadrão)
Alguns Métodos
void put (String chave, String valor)
Define um par chave-valor no conjunto de propriedades.
String getProperty ( String chave )
Retorna o valor associado a uma chave.
String getProperty ( String chave, String valorPadrão )
Retorna o valor associado a uma chave ou valorPadrão caso a chave não
seja encontrada.
void load ( InputStream entrada )
Carrega um conjunto de propriedades de uma entrada.
void store ( OutputStream saída, String comentário )
Salva o conjunto de propriedades em uma saída.
39
40. Exemplo utilizando Properties
import java.sql.*;
import java.util.*;
import java.io.*;
public class ExemploProperties {
public static void main ( String args [ ] ) {
Properties dados = new Properties();
try {
FileInputStream fis = new FileInputStream("nomeArquivoPropriedades");
dados.load(fis);
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String driver = dados.getProperty("jdbcDriver");
String banco = dados.getProperty("urlBanco");
String usuario = dados.getProperty("usuarioBanco");
String senha = dados.getProperty("senhaBanco");
40
41. Exemplo utilizando Properties
try {
Class.forName(driver);
Connection con = DriverManager.getConnection(banco, usuario, senha);
Statement st = con.createStatement ( );
String sql = "SELECT * FROM nomeTabela ORDER BY nomeCampo";
ResultSet rs = st.executeQuery ( sql );
while ( rs.next() ) {
System.out.println( rs.getString(1) + rs.getString(2) );
}
} catch (Exception e) {
System.out.println ( e );
}
} jdbcDriver=com.mysql.jdbc.Driver
} urlBanco=jdbc:mysql://127.0.0.1:3306/uniban
usuarioBanco=root
senhaBanco=admin
41