Você está na página 1de 25

Colees

Framework Collections
Relembrando - Lista, Pilha, Fila
Lista
Elementos armazenados seguindo uma sequncia lgica;

Livre acesso a todas as posies;

Pilha
Algoritmo LIFO (Last In First Out);

Adio e remoo apenas pelo topo;

Fila
Algoritmo FIFO (First In First Out);

Adio no fim e remoo no incio;


Por que usar o Framework collections?

Por que no usar?!


Exaustivamente testada;
Alta disponibilidade;
Aproveitamento de tempo.
O que ?

Conjunto de classes e interfaces voltadas ao agrupamento e manipulao de


dados, normalmente do mesmo tipo, que apresenta bom desempenho e que
viabiliza a reutilizao de cdigo.

Ele est presente na API Java desde a verso 1.2.


Entendendo o Framework
Iterable

Collection

Interface a Interface b Interface c Interface d

Classe a Classe b Classe c Classe d


Entendendo o Framework
Duas interfaces como a base do framework;
Iterable
Mtodo iterator() - Devolve um Iterator<T>
hasNext-indicaseaindaexistealgumelementonacoleoqueaindanofoi
visitado;
next - entrega uma referncia para o elemento atual;
remove - remove o elemento atual da coleo que est sendo iterada.
Collection
Estende Iterable;
Fornece diversos mtodos para manipulao de dados;
Implementada por uma srie de classes;

https://docs.oracle.com/javase/7/docs/api/
Interface List
Fornece funcionalidades par implementao de listas;
Ordem importante
add(Object elemento): adiciona o objeto elemento no final da lista

add(intindice,Objectelemento):adicionaoobjetoelementoemumaposioespecficada
lista;
prover mtodos de acesso aos elementos;
ndices baseados em Zero;
Permite elementos duplicados;
ArrayList, AttributeList, Stack, Vector e LinkedList so exemplo de classes concretas que a
implementam;
ArrayList

Implementao mais utilizada da interface List;


Permite informar capacidade inicial;
public class Program {
public static void main(String[] args) {

ArrayList lista = new ArrayList(50);

lista.add("Joo");
lista.add("Gisele");
lista.add("Pedro");
lista.add(1, "Ana");

System.out.println("Ana est na posio: " + lista.indexOf("Ana"));

lista.clear();

System.out.println("Tamanho atual da lista: " + lista.size());


}
}
Stack
Estende Vector que implementa List

Oferece funcionalidades para implementao de Pilhas;

Mtodos prprios:

Boolean empty() verifica se a pilha est vazia;

E - peek() Busca o objeto do topo da pilha sem remov-lo;

E - pop() Remove e retorna o objeto do topo da pilha;

E - push(E item) Insere um elemento no topo da pilha;

int - search(Object o) Retorna a posio (baseada em 1) que o objeto se encontra na pilha.

Construtor nico Public Stack() - Cria pilha vazia


Stack pilha = new Stack();

String texto = "PILHA";

for (char c : texto.toCharArray()) {


pilha.push(c);
}

System.out.println("Elemento no topo da pilha: " + pilha.peek());

System.out.println("Quantidade de elementos na pilha: " + pilha.size());

String textoInvertido = "";

while (!pilha.isEmpty()) {
textoInvertido += pilha.pop();
}

System.out.println("Texto obtido na inverso: " + textoInvertido);


Interface Set
Mesmo nvel de List;
Apresenta funcionalidade para criao de colees do tipo conjunto;
Elementos verificados durante antes da insero;
No fornece mtodos de acesso direto aos elementos;
Necessidade de uso do um Iterator;

hasnext(), next();
Class HashSet

HashSet hash = new HashSet();


hash.add("a");
hash.add("e");
hash.add("e");
hash.add("e");
System.out.println("Qtd. de Elementos: "+ hash.size());
Interface Map
Permite a criao de colees conhecidas como Mapas ou Dicionrios;
Associao entre chave e valor;
Prov mtodos para insero, remoo e busca de elementos ou chaves dentro de seu
conjunto.

put(chave,elemento: recebe um elemento a ser inserido na coleo e a chave qual este


elemento estar associado;
get(chave): devolve o elemento associado chave fornecida, se ele existir;
remove(chave): remove o elemento associado chave fornecida, se ele existir;
keySet(): devolve um Set de todas as chaves da coleo;
values(): devolve um Collection de todos os elementos contido na coleo.
Class HashMap

Implementa Map;
Permite que adicionemos tanto chaves nulas quanto elementos nulos;
No permitir elementos ou chaves duplicados;
No garante ordem dos elementos.
/* Criando o mapa */
HashMap mapa = new HashMap();

/* Adicionando elementos */
mapa.put(8, "Oito");
mapa.put(1.5f, "Um e meio");
mapa.put('b', "Letra B");
mapa.put(new Object(), new ArrayList());

/* Buscando um elemento atravs da chave */


char chave = 'c';
System.out.println("O elemento associado chave " + chave + " "+ mapa.get(chave));

/* Exibindo todos os elementos da coleo */


for (Object obj : mapa.values()) {
System.out.println(obj);
}
Exemplo HashMap

Chave Valor

8 Oito

1.5 Um e meio

b Letra B

Object ArrayList
Evitando Cast com Generics
Classes que tero atributos e parmetros de mtodos definidos como um
tipo de dados genrico a ser definido posteriormente.
Algumas letras reservadas para o recurso Generics:
E - Elemento
K - Chave (Key)
N - Nmero
T - Tipo
V - Valor
public class Generics<T> {
private T meuObjeto;
public Generics(T objeto) {
meuObjeto = objeto;
}

public void exibirInformacaoDoObjeto(){


System.out.println(meuObjeto.toString());
}
}

public static void main(String[] args) {

Generics<String> t1 = new Generics<String>("Texto");


t1.exibirInformacaoDoObjeto();

Generics<Double> t2 = new Generics<Double>(new Double(99));


t2.exibirInformacaoDoObjeto();

Generics<int[]> t3 = new Generics<int[]>(new int[]{10,20,30});


t3.exibirInformacaoDoObjeto();
}
Usando Generics em Colees
Necessidade de Cast

ArrayList listaSemGenerics = new ArrayList();


listaSemGenerics.add(new Double(5));
Double elemento = (Double) listaSemGenerics.get(0);

Uso de generics

ArrayList<Double> listaComGenerics = new ArrayList<Double>();


listaComGenerics.add(new Double(5));
Double elemento = listaComGenerics.get(0);
Usando Generics em Colees

HashMap<String, Double> mapa = new HashMap();


mapa.put("Elemento 1", new Double(2342.8));
Ordenao em colees
Conta conta1 = new Conta(5452, "Phillip Lahm");
Conta conta2 = new Conta(1234, "Lucas Podolski");
Conta conta3 = new Conta(3145, "Arne Friedrich");

List<Conta> lista = new ArrayList<Conta>();


lista.add(conta1);
lista.add(conta2);
lista.add(conta3);

Collections.sort()
Interface Comparable
Define um critrio padro de comparao entre os objetos da classe que a
implementa;

Fornece o mtodo compareTo(T o);

public Conta implements Comparable<Conta> {

private int numero;


private String titular;

public int compareTo(Conta outraConta) {


return this.numero < outraConta.numero) ? -1 : (this.numero > outraConta.numero ? 1 : 0);
}
}

Collections.sort(lista);
Interface Comparator
A classe que implementa torna-se um critrio de entre dois objetos de um tipo T;
Fornece o mtodo compare(T o1, T o2);

public class TitularComparator implements Comparator<Conta> {


public int compare(Conta conta, Conta outraConta) {
return conta.getTitular().compareTo(outraConta.getTitular());
}
}

TitularComparator comp = new TitularComparator();


Collections.sort(lista,comp);
Atividade
Crie uma classe Carro para representar carros, armazenando as informaes de
Modelo, Cor, Valor, Ano de Fabricao. Instancie alguns objetos carro e em seguida,
armazene-os em um ArrayLista. Crie formas de ordenao dos objetos considerando
cada um dos atributos da classe Carro.

Você também pode gostar