Curso Java - Básico - Aula 7

O que é uma coleção?

  • É um objeto que agrupa múltiplos elementos.
  • São usadas para armazenar, recuperar, e manipular dados.
  • Tipicamente representam itens de dados que tem um relacionamento entre si.
    • Pasta de correio (coleção de cartas)
    • Diretório de telefone (coleção de mapeamentos de nome para número de telefone)

O que é um framework de coleções?

  • É uma arquitetura unificada para representar e manipular coleções.
  • Todo framework de coleções contém 3 coisas:
    • Interfaces
    • Implementações
    • Algoritmos

Benefícios de um framework de coleções

  • Reduz o esforço de programação.
  • Aumenta a qualidade e velocidade dos programas.
  • Permite interoperabilidade entre aplicações não-relacionadas.
  • Reduz o esforço de projeto de novas APIs.

Arrays

  • Mais uma maneira de "guardar" objetos.
  • O tamanho do array é determinado quando o array é criado (em tempo de execução).
  • Após a sua criação, o array é uma estrutura de tamanho fixo.

    ./images/arrays.gif

Quando usar arrays (1)

  • Existem 2 aspectos que diferenciam os arrays de outros tipos de containers:
    • Eficiência
    • Checagem de tipo

Quando usar arrays (2)

  • Deve-se usar arrays em lugar de outros tipos de containers quando:
    • Sabe-se de antemão o número máximo de elementos que será armazenado.
    • Deseja-se permitir que somente um tipo específico esteja contido na coleção.
    • Armazenar tipos primitivos ao invés de objetos.

A classe Arrays

  • A classe Arrays do pacote java.util contém métodos estáticos para manipulação de arrays:
    • equals()
    • fill()
    • sort()
    • binarySearch()
    • asList()

Interfaces do framework de coleções

  • O propósito básico destas interfaces é permitir que as coleções sejam manipuladas independentemente dos detalhes de suas representações.

    ./images/colecoes.gif

A interface Collection

  • Representa um grupo de objetos.
  • Usada quando se deseja a máxima generalidade.

    ./images/interfacecollection.jpg

A interface Set

  • Um Set é uma Collection que não pode conter elementos duplicados.
  • A interface Set estende a interface Collection, mas não contém nenhum método adicional.
  • Apenas adiciona a restrição de que elementos duplicados são proibidos.
    • Método equals() da classe Object.

A interface List

  • Uma List é uma Collection ordenada.
  • Podem conter elementos duplicados.
  • Além das operações herdadas de Collection, a interface List inclui operações para:
    • Acesso posicional
    • Busca
    • Iteração na lista
    • Intervalo

A interface Map

  • Um Map é um objeto que mapeia chaves para valores (key=value).
  • Um Map não pode conter chaves duplicadas.
  • Cada chave pode mapear apenas para um valor.

Ordenação de objetos

  • Uma List l pode ser ordenada da seguinte forma:
    • Collections.sort(l);
  • Se a lista consistir de Strings, elas serão ordenadas em ordem lexicográfica.
  • Se consistir de elementos do tipo Date, eles serão ordenados em ordem cronológica.
  • Como o JAVA sabe como fazer isto?
    • Interface Comparable
    • Ordenação Natural

Ordenação de suas próprias classes

  • Para ordenar uma classe definida pelo programador usando sua ordenação natural, esta classe deve implementar a interface Comparable.
  • A interface Comparable consiste de um único método:

    ./images/interfacecomparable1.jpg

Ordenação não-natural (1)

  • Se quisermos ordenar os objetos numa lista em alguma outra ordem que não a sua ordem natural?
  • Ou se quisermos ordenar objetos que não implementam a interface Comparable?
  • A interface Comparator
  • Objeto que encapsula uma ordenação

    ./images/interfacecomparable2.jpg

Ordenação não-natural (2)

  • Para ordenar uma lista l utilizando uma classe que implementa Comparator chamada comp, fazemos:
  • Collections.sort(l, comp);

A interface SortedSet

  • Um SortedSet é um Set que mantém seus elementos em ordem ascendente, de acordo com sua ordenação natural, ou de acordo com um Comparator fornecido no momento da criação do SortedSet.
  • Além das operações normais de um Set, o SortedSet disponibiliza operações para:
    • Intervalo
    • Pontos extremos
    • Acesso ao Comparator

A interface SortedMap

  • Um SortedMap é um Map que mantém suas chaves em ordem ascendente, ordenadas de acordo com sua ordenação natural, ou de acordo com um Comparator fornecido no momento de sua criação.
  • A interface do SortedMap é análoga à interface do SortedSet.

Implementações

  • São os verdadeiros objetos de dados usados para armazenar coleções.
  • Implementam as interfaces descritas anteriormente.

    ./images/implementacoes.gif

Algoritmos

  • Pedaços de funcionalidade reusável disponibilizados pelo JDK.
  • Implementados como métodos estáticos da classe Collections.
  • A maioria opera sobre Lists, mas alguns (min e max) operam sobre Collection genéricas.
    • Ordenação à sort(List l) e sort(List l, Comparator c)
    • Desordenação à shuffle(List l)
    • Rotinas de manipulação de dados à reverse(List l); fill(List l, Object o); copy(List dest, List src);
    • Busca à binarySearch(List l, Object o) e binarySearch(list l, Object o, Comparator c);
    • Valores extremos à min(Collection col); max(Collection col)

Resumo

  • Um array associa um índice a um objeto de um determinado tipo, não precisando fazer um cast para usar este tipo.
  • Um array também pode guardar tipos primitivos, mas seu tamanho não pode ser modificado, uma vez que tenha sido criado.
  • Uma Collection guarda elementos simples, enquanto um Map guarda pares associativos.
  • Assim como um array, uma List associa índices a objetos, mas seu tamanho aumenta automaticamente conforme se adicionam mais elementos.
  • Use ArrayList se for fazer muitos acessos aleatórios, e LinkedList se for fazer muitas inserções e remoções na lista.
  • Um Map associa objetos a outros objetos. HashMap é usado para acesso rápido, enquanto TreeMap mantém as chaves ordenadas.
  • Um Set não permite objetos repetidos. HashSet fornece busca rápida, enquanto TreeSet mantém os elementos do conjunto ordenados.
~ &