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 Collectionc1 = 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. ArrayListlista = 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 HashMapmp = 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!