Mostrando postagens com marcador Collections. Mostrar todas as postagens
Mostrando postagens com marcador Collections. Mostrar todas as postagens

Collections


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:

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:

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!