Mini Curso de Java – Parte 10 1


Java Logo

Olá pessoal. Esta é a décima parte do nosso mini curso de Java que terá 11 partes. Ele é voltado para iniciantes, porém é recomendado que ao estudá-lo, você já tenha pelo menos algum conhecimento em lógica de programação. Se você perdeu:
a primeira parte, leia aqui; a segunda parte, leia aqui; a terceira parte, leia aqui; a quarta parte, leia aqui; a quinta parte, leia aqui; a sexta parte, leia aqui; a sétima parte, leia aqui; a oitava parte, leia aqui; a nona parte, leia aqui;

Coleções

Coleção é um objeto que representa um grupo de objetos, este tipo de objetos tem grandes vantages, entre elas:
● Redução de esforço de programação
● Aumento de performance
● Promover o reuso de código

Dentro das inúmeras coleções existentes vamos citar algumas logo abaixo e mostrar como será sua implementação.

Principais coleções:

Collection: Interface base para todos os tipos de coleção. Ela define as operações mais básicas para coleções de objetos, como adição (add) e remoção (remove) abstratos (sem informações quanto à ordenação dos elementos), esvaziamento (clear), tamanho (size), conversão para array (toArray), objeto de iteração (iterator), e verificações de existência (contains e isEmpty).

List: Interface que extende Collection, e que define coleções ordenadas (sequências), onde se tem o controle total sobre a posição de cada elemento, identificado por um índice numérico. Na maioria dos casos, pode ser encarado como um “array de tamanho variável” pois, como os arrays primitivos, é acessível por índices, mas além disso possui métodos de inserção e remoção.

Dentre os tipos de List temos: ArrayList, LinkedList, Vector, Stack.

Set: Interface que define uma coleção, ou conjunto, que não contém duplicatas de objetos. Isto é, são ignoradas as adições caso o objeto ou um objeto equivalente já exista na coleção. Por objetos equivalentes, entenda-se objetos que tenham o mesmo código hash (retornado pelo método hashCode()) e que retornem verdadeiro na comparação feita pelo método equals().

Não é garantida a ordenação dos objetos, isto é, a ordem de iteração dos objetos não necessariamente tem qualquer relação com a ordem de inserção dos objetos. Por isso, não é possível indexar os elementos por índices numéricos, como em uma List.

Dentre os tipos de Set temos: HashSet, LinkedHasSet.

SortedSet: Interface que estende Set, adicionando a semântica de ordenação natural dos elementos. A posição dos elementos no percorrimento da coleção é determinado pelo retorno do método compareTo(o), caso os elementos implementem a interface Comparable, ou do método compare(o1, o2) de um objeto auxiliar que implemente a interface Comparator.

Map: Interface que define um array associativo, isto é, ao invés de números, objetos são usados como chaves para se recuperar os elementos. As chaves não podem se repetir (seguindo o mesmo princípio da interface Set), mas os valores podem ser repetidos para chaves diferentes. Um Map também não possui necessariamente uma ordem definida para o percorrimento.

Dentre os tipos de Map temos: HashMap, LinkedHashMap, HashTable, Properties, IdentityHashMap, WeakHashMap.

SortedMap: Interface que estende Map, adicionando a semântica de ordenação natural dos elementos, análogo à SortedSet. Também adiciona operações de partição da coleção, com os métodos headMap(k) – que retorna um SortedMap com os elementos de chaves anteriores a k -, subMap(k1,k2) – que retorna um SortedMap com os elementos de chaves compreendidas entre k1 e k2 – e tailMap(k) – que retorna um SortedMap com os elementos de chaves posteriores a k.

Dentre os tipos de SortedMap temos: TreeMap.

Implementação das coleções:

Abaixos temos exemplos de implementação de inicialização de Collection:
// Versão normal
List listaCores = new ArrayList();
listaCores.add(“vermelho”);
listaCores.add(“verde”);
listaCores.add(“amarelo”);
listaCores.add(“branco”);

// Versão abreviada utilizando um array
List listaCores = new ArrayList(Arrays.asList(new String[] {
“vermelho”, “verde”, “amarelo”, “branco” }));

Abaixos temos exemplos de implementação de criação e ordenação de Collection:
List listaCores = new ArrayList(Arrays.asList(new String[] {
“vermelho”, “verde”, “amarelo”, “branco” }));
Collections.sort(listaCores);

Abaixos temos exemplos de implementação de Collection:
Iterator it = colecao.iterator();
while (it.hasNext()) {
…String item = (String) it.next();
…System.out.println(item);
}

Abaixos temos exemplos de implementação de Map:
Map mapa = new HashMap();
Iterator itChaves = mapa.keySet().iterator();
while (itChaves.hasNext()) {
…Object chave = itChaves.next();
…Object valor = mapa.get(chave);
…System.out.println(chave + ” = ” + valor);
}
Iterator it = listaCores.iterator();
while (it.hasNext()) {
…String item = (String) it.next();
…if (item.charAt(0) == \’v\’) { //retirando as cores que começam com \’v\’
……it.remove();
…}
}

Abaixos temos exemplos de implementação de iterator para retirar elementos de uma Collection:
Iterator it = listaCores.iterator();
while (it.hasNext()) {
…String item = (String) it.next();
…if (item.charAt(0) == \’v\’) { //retirando as cores que começam com \’v\’
……it.remove();
…}
}

Abaixos temos exemplos de implementação de uma TreeSet para listar o conteúdo de um Map/Properties de maneira ordenada:
Properties p = new Properties();
//…
Iterator it = new TreeSet(p.keySet()).iterator(); //ordena as chaves antes de criar o iterator
while (it.hasNext()) {
…String key = (String) it.next();
…System.out.println(key + “=” + p.getProperty(key));
}

Abaixos temos exemplos de implementação de intersecção de conjuntos utilizando Set:
Set coresQuentes = new HashSet(Arrays.asList(new String[] {
“vermelho”, “laranja”, “amarelo” }));
Set conjuntoCores = new HashSet(Arrays.asList(new String[] {
“vermelho”, “verde”, “amarelo”, “branco” }));
conjuntoCores.retainAll(coresQuentes);
// conjuntoCores == {“vermelho”, “amarelo”}

Semana que vem estarei de volta com a parte 11 do Mini Curso de Java: Arquivos. Até lá! 😉

Últimos 5 artigos de Tiago Souza

Sobre Tiago Souza

De Campinas-SP, bacharel em Ciência da Computação pela Anhanguera Educacional. Técnico em Processamento de Dados pelo Cotuca é desenvolvedor Web e trabalhou dois anos com desenvolvimento PHP e Java. Atualmente trabalha como desenvolvedor .Net (C#). Utilizando metodologia SCRUM, Também desenvolve aplicativos para Android por prazer.

Deixe uma resposta