Quando uma aplicação precisa manipular uma quantidade grande de dados, ela deve utilizar alguma estrutura de dados. Na biblioteca do Java, há diversas estruturas de dados que facilitam o trabalho do desenvolvedor.
Collection → Βase da hierarquia. Representa operações que são comuns a todas as coleções:
- add() - para adicionar o elemento especificado à coleção.
- remove() - para remover o elemento especificado da coleção.
- contains() - para verificar se a coleção contém o elemento especificado.
- size() - para obter a quantidade de elementos na coleção.
Set → Não armazena elementos duplicados.
List → Mantém a seqüência de inserção. Pode armazenar elementos duplicados.
Queue → Utilizamos esta interface quando queremos uma coleção do tipo FIFO (Fila).
Map → Relaciona chaves com valores. Não armazena chaves duplicadas.
A figura apresentada pode ser interpretada da seguinte forma: “Um Set, List ou Queue é um tipo de Collection, cada um com suas particularidades. Já um Map não é do mesmo tipo dos demais mas também manipula coleções de elementos”.
SET (HashSet, LinkedHashSet e TreeSet):
O uso dessa interface(Set) é quando a ordenação não tem prioriade e sim de não ter duplicatas.
HashSet - Não estabelece nenhuma ordem particular entre os objetos.
TreeSet - Utiliza-se de uma árvore Binária para alinhar os elementos.
LinkedHashSet - Mantém a ordem de iteração dos elementos
Exemplo:
HashSet - Não estabelece nenhuma ordem particular entre os objetos.
TreeSet - Utiliza-se de uma árvore Binária para alinhar os elementos.
LinkedHashSet - Mantém a ordem de iteração dos elementos
Exemplo:
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
public class ExemploSet {
public static void main(String[] args) {
// Utilizando HashSet
Collection c1 = new HashSet();
c1.add("Andre");
c1.add("Carlos");
c1.add("Bruno");
c1.add("Daniel");
c1.add("Daniel");
System.out.println("==== HashSet ====");
for(String str : c1) {
System.out.println(str);
}
// Utilizando TreeSet
System.out.println("==== TreeSet ====");
Collection c2 = new TreeSet(c1);
for(String str : c2) {
System.out.println(str);
}
// Utilizando LinkedHashSet
System.out.println("==== LinkedHashSet ====");
Collection c3 = new LinkedHashSet(c1);
for(String str : c3) {
System.out.println(str);
}
}
}
A saída será: (Perceba que mesmo tendo inserido 2 vezes o nome "Daniel", ele só aparece uma vez):
==== HashSet ====
Andre
Daniel
Carlos
Bruno
==== TreeSet ====
Andre
Bruno
Carlos
Daniel
==== LinkedHashSet ====
Andre
Carlos
Bruno
Daniel
LIST (ArrayList, Vector e LinkedList):
Devemos utilizar um List quando a ordem de inserção ou a posição na coleção nos interessa.
ArrayList - Pode ser visto como um array dinâmico.
Vector - Basicamente um ArrayList, no entanto seus métodos são sincronizados
LinkedList - Todos os elementos são ligados entre si.
Exemplo:
Obs: ArrayList e LinkedList seguem a mesma interface, List. Portanto, é possível realizar as mesmas operações nas duas listas.
import java.util.ArrayList;
import java.util.Collections;
public class ExemploList {
public static void main(String[] args) {
//Criando um ArrayList.
ArrayList lista = new ArrayList();
//Para adicionar elementos ao final da lista, usamos o método add
lista.add("Sao Paulo");
lista.add("Belo Horizonte");
lista.add("Rio de Janeiro");
lista.add("Bahia");
lista.add("Amazonia");
imprime("Elementos adicionados ate agora", lista);
//Para adicionar em uma posicão especifica utilizamos o indice
lista.add(1, "Parana");
lista.add(3, "Acre");
imprime("Lista depois de adicionar mais dois elementos", lista);
//Podemos acessar um elemento da lista usando get
System.out.println("O 3° elemento da lista é: " + lista.get(2));
//Podemos obter o tamanho da lista utilizando o método size()
System.out.println("O tamanho da lista é: " + lista.size());
//Utilizamos remove para remover um elemento da lista
lista.remove("Amazonia");
imprime("Lista depois de remover 'Amazonia'", lista);
//Podemos verificar se existe algum elemento na lista
if(lista.contains("Sao Paulo"))
System.out.println("Sao Paulo existe");
else
System.out.println("Sao Paulo não existe");
if(lista.contains("Ceara"))
System.out.println("Ceara existe");
else
System.out.println("Ceara não existe");
//Podemos ordenar uma lista utilizando o sort
Collections.sort(lista);
imprime("Lista ordenada", lista);
}
// Percorre todos elementos de qualquer coleção
private static void imprime(String titulo, ArrayList lista) {
System.out.println(titulo + ":");
for(String str : lista) {
System.out.println(str);
}
System.out.println();
}
}
O Vector não é mais utilizado, é uma classe antiga, anterior a Collections Framework e hoje não há mais motivos para usa-la. O ArrayList é seu substituto direto.
Existe uma diferença entre o ArrayList e o LinkedList.
A diferença é que o ArrayList baseia num array convencional, portanto, é fácil acessar qualquer elemento e inserir objetos no final do array. Por outro lado, é mais custoso inserir elementos no meio do array, pois alguns elementos terão de ser deslocados.
Já o LinkedList é uma lista duplamente encadeada. Isso quer dizer que é fácil inserir objetos em qualquer ponto da lista, mas é muito complicado acessar uma posição específica (o java terá que percorrer a lista toda até chegar lá).
MAP (Hashtable, LinkedHashMap, HashMap e TreeMap):
Um Map identifica seus elementos através de chave / valor
HashMap - É um Map desorganizado, isto é, a ordem de iteração dos elementos é desconhecida
Hashtable - Similar ao HashMap, porém não aceita valor nulo tanto para chaves quanto para valores.
LinkedHashMap - Similar ao LinkedHashSet, porém esta é a versão que implementa a interface Map
TreeMap - Ordena seus elementos através da chave por alguma regra.
Exemplo:
Um exemplo simples e prático de uso de map seria para um sistema de biblioteca, onde cada livro possui um código para busca:
Por hoje é isso!!! Estejam livres para comentar ou dar sugestões!
Thanks!
Um exemplo simples e prático de uso de map seria para um sistema de biblioteca, onde cada livro possui um código para busca:
public class Livro {
private String codigo = "";
private String nome = "";
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
import java.util.HashMap;
public class Biblioteca {
public static void main(String[] args) {
// os objetos entre as tags < > definem os valores fixos de chave
// e valor que usaremos durante todo nosso programa
HashMap mp = new HashMap();
Livro livro1 = new Livro();
livro1.setCodigo("java1");
livro1.setNome("Java como programar");
mp.put("java1", livro1);
Livro livro2 = new Livro();
livro2.setCodigo("BD2");
livro2.setNome("Aprendendo MySQL");
mp.put("BD2", livro2);
Livro livro3 = new Livro();
livro3.setCodigo("Html3");
livro3.setNome("Joomla fácil");
mp.put("Html3", livro3);
// Acessando um valor através de uma chave
Livro livro = mp.get("Html3");
System.out.println(livro.getNome());
}
}
Por hoje é isso!!! Estejam livres para comentar ou dar sugestões!
Thanks!
muito bom!
ResponderExcluir