Listas

Tipos de Dados e Exceções em Java

Jim White

Java Developer

Interface List

  • Interface List, subinterface de Collection
    • Define um grupo ordenado de objetos
    • Pode conter objetos duplicados
  • Várias implementações de List
    • Comportamento semelhante
    • A implementação define como os objetos são gerenciados internamente
Tipos de Dados e Exceções em Java

Implementações de List

  • ArrayList - lista redimensionável, indexada (como arrays), ordenada

ArrayList são semelhantes a arrays Java com elementos indexados

  • LinkedList - objetos conectados por links para o próximo e o anterior.

LinkedList são listas de objetos conectadas por ponteiros

  • Independentemente da implementação, adicione, remova e altere objetos do mesmo jeito
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/List.html for List types and details
Tipos de Dados e Exceções em Java

ArrayList

  • Construa uma instância com new e use generics para especificar o tipo
  • Adicione um objeto ao final com .add(object)
  • Acesse um objeto com .get(index)
    • ArrayList tem índice começando em zero
  • Substitua/altere um objeto com .set(index, object)
  • Remova um objeto com .remove(index)
  • Limpe/remova todos os objetos com .clear()
  • Conte os objetos com .size()
import java.util.ArrayList;
...
ArrayList<String> animals
  = new ArrayList<String>();

animals.add("horse"); animals.add("cow"); animals.add("horse"); // Duplicates allowed
String c = animals.get(1); // c="cow" animals.set(1, "chicken");
// Removes the first horse animals.remove(0); // Removes all objects animals.clear();
animals.size();
Tipos de Dados e Exceções em Java

Objetos e primitivos

  • Use wrappers para adicionar um primitivo a qualquer objeto do Collections Framework
  • Primitivos adicionados são "autoboxed"
    • Autobox: processo de colocar automaticamente o primitivo no wrapper
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 é automaticamente envolvido por Integer e adicionado
  • Autoboxing funciona com todos os objetos do Collections Framework
Tipos de Dados e Exceções em Java

Coleções heterogêneas

  • Estruturas de dados do Collections Framework podem ser heterogêneas
    • Heterogêneas = guardam objetos de tipos diferentes
    • Use Object como o tipo parametrizado
ArrayList<Object> list = new ArrayList<Object>(); // Permite qualquer objeto
list.add(new Integer(5)); // Adiciona um Integer
list.add(6); // Adiciona um Integer usando autoboxing
list.add("Hello"); // Adiciona uma String
Tipos de Dados e Exceções em Java

Iterando uma List

  • Use a sintaxe "for each" para percorrer os objetos de uma List
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");

for (String animal : animals) { // for-each para percorrer todos do ArrayList
    System.out.println(animal);
}
horse
cow
chicken
Tipos de Dados e Exceções em Java

println em List

  • O conteúdo de uma instância List (como ArrayList) pode ser exibido com println
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");
System.out.println(animals);  // Exibe todos os elementos do ArrayList

ArrayList<Object> list = new ArrayList<Object>();
list.add(5);
list.add("Hello");
System.out.println(list);  // Exibe todos os elementos do ArrayList
[horse, cow, chicken]
[5, Hello]
Tipos de Dados e Exceções em Java

LinkedList

  • LinkedList é construída como ArrayList
  • LinkedList tem os mesmos métodos de ArrayList
import java.util.LinkedList;
...
LinkedList<String> cars // Create a new ...
  = new LinkedList<String>(); // ... LinkedList
cars.add("Ford"); // Add an object to the list
cars.add("Mercedes");
String c = cars.get(1);
cars.set(1, "Toyota"); // Replace an object
System.out.println(cars); // Display the list
cars.remove(0); // Remove an object
cars.clear();  // Remove all objects
cars.size(); // Get the list length
[Ford, Toyota]
Tipos de Dados e Exceções em Java

Métodos extras de LinkedList

  • Alguns métodos adicionais
    • addFirst() adiciona no início da lista
    • addLast() adiciona no final da lista
    • removeFirst() remove do início
    • removeLast() remove do final
cars.addFirst("Fiat"); // Add to the beginning
cars.addLast("BMW"); // Add the the end
cars.removeFirst(); // Remove the first object
cars.removeLast(); // Remove the last object
Tipos de Dados e Exceções em Java

Semelhanças entre tipos de coleção

  • ArrayList e LinkedList parecem iguais
    • Outros tipos no Collections Framework também terão semelhanças
    • Isso é proposital
  • Elas compartilham a interface: List
    • Um exemplo de polimorfismo ("muitas formas")
Tipos de Dados e Exceções em Java

ArrayList vs LinkedList

  • Operações em ArrayList e LinkedList (ou qualquer List) são as mesmas
    • A escolha do tipo de List depende do uso
  • Pontos sobre ArrayList:
    • Rápida em acesso aleatório (ex: list.get(11))
    • Mais lenta para adicionar e remover no meio
    • Porque os objetos precisam ser movidos fisicamente ao inserir/remover

Adicionar no meio de um ArrayList exige muito deslocamento

Tipos de Dados e Exceções em Java

ArrayList vs LinkedList

  • Pontos sobre LinkedList:
    • Mais lenta em acesso aleatório (ex: list.get(11))
    • Mais rápida para adicionar e remover no meio
    • Porque nada é movido fisicamente, só algumas referências mudam

Adicionar no meio de uma LinkedList só requer mudar alguns ponteiros

Tipos de Dados e Exceções em Java

Vamos praticar!

Tipos de Dados e Exceções em Java

Preparing Video For Download...