Colees Listas A interface java util List Colees

  • Slides: 25
Download presentation
Coleções: Listas A interface java. util. List

Coleções: Listas A interface java. util. List

Coleções Existem três grandes tipos de coleções: Listas (List) Conjuntos (Set) Mapas (Map) A

Coleções Existem três grandes tipos de coleções: Listas (List) Conjuntos (Set) Mapas (Map) A seguir veremos em detalhes cada tipo.

Listas: Java. Util. List Um primeiro recurso que a API de Collections traz são

Listas: Java. Util. List Um primeiro recurso que a API de Collections traz são listas. Uma lista é uma coleção que permite elementos duplicados e mantém uma ordenação específica entre os elementos. • Em outras palavras, você tem a garantia de que, quando percorrer a lista, os elementos serão encontrados em uma ordem pré-determinada, definida hora da inserção dos mesmos. • Lista resolve todos os problemas que levantamos em relação ao array (busca, remoção, tamanho “infinito”, . . . ). Esse código já está pronto!

Listas: Conceito Uma lista é uma coleção de objetos armazenados linearmente. Cada elemento tem

Listas: Conceito Uma lista é uma coleção de objetos armazenados linearmente. Cada elemento tem o seu sucessor (menos o último) e o seu antecessor (menos o primeiro). Listas podem ser mantidas ordenadas ou sem ordem. Há controle na posição de inserção ou remoção O acesso aos elementos se dá pelo índice

Listas - Operações As operações mais importantes em listas são: Adicionar um objeto em

Listas - Operações As operações mais importantes em listas são: Adicionar um objeto em qualquer lugar da lista; Remover um objeto de qualquer lugar da lista; Obter o elemento de qualquer lugar da lista; Percorrer os elementos da lista; Verificar se um elemento está na lista; Descobrir o índice de um elemento na lista; Obter o número de elementos da lista.

Listas: java. util. List A API de Collections traz a interface java. util. List,

Listas: java. util. List A API de Collections traz a interface java. util. List, que específica o que uma classe deve ser capaz de fazer para ser uma lista. Há diversas implementações disponíveis, cada uma com uma forma diferente de representar uma lista. • A implementação mais utilizada da interface List é a Array. List, que trabalha com um array interno para gerar uma lista. • Array. List é mais rápida na pesquisa do que sua concorrente. • Linked. List é mais rápida na inserção e remoção de itens nas pontas.

Listas: Java. Util. Listas: java. util. List

Listas: Java. Util. Listas: java. util. List

Listas: Java. Util. List Array. List não é um Array! É comum confundirem uma

Listas: Java. Util. List Array. List não é um Array! É comum confundirem uma Array. List com um array, porém ela não é um array: O que ocorre é que, internamente, ela usa um array como estrutura para armazenar os dados. Porém este atributo está propriamente encapsulado e você não tem como acessá-lo. Repare, também, que você não pode usar [] com uma Array. List, nem acessar atributo length. Não há relação!

Listas: instanciando Para criar um Array. List, basta chamar o construtor: Array. List lista

Listas: instanciando Para criar um Array. List, basta chamar o construtor: Array. List lista = new Array. List(); É sempre possível abstrair a lista a partir da interface List: List lista = new Array. List(); Para criar uma lista de nomes (String), podemos fazer: List lista = new Array. List(); lista. add("Manoel"); lista. add("Joaquim"); lista. add("Maria");

Listas: adicionando elementos A interface List possui dois métodos add: recebe o objeto a

Listas: adicionando elementos A interface List possui dois métodos add: recebe o objeto a ser inserido e o coloca no final da lista. add("Manoel"); permite adicionar o elemento em qualquer posição da lista. add(2, "Manoel"); Note que, em momento algum, dizemos qual é o tamanho da lista

Listas: adicionando elementos Toda lista (na verdade, toda Collection) trabalha do modo mais genérico

Listas: adicionando elementos Toda lista (na verdade, toda Collection) trabalha do modo mais genérico possível. Todos os métodos trabalham com Object. Conta. Corrente c 1 = new Conta. Corrente(); c 1. deposita(100); Conta. Corrente c 2 = new Conta. Corrente(); c 2. deposita(200); List contas = new Array. List(); contas. add(c 1); contas. add(c 2);

Listas: tamanho e acesso a elementos Para saber quantos elementos há na lista, usamos

Listas: tamanho e acesso a elementos Para saber quantos elementos há na lista, usamos o método size(): System. out. println( contas. size() ); Há ainda um método get(int) que recebe como argumento o índice do elemento que se quer recuperar. Através dele, podemos fazer um for para iterar na lista de contas: for (int i = 0; i < contas. size(); i++) { contas. get(i); // código não muito útil. . } Mas como fazer para imprimir o saldo dessas contas?

Listas: convertendo itens recuperados Podemos acessar o get. Saldo() diretamente após fazer contas. get(i)?

Listas: convertendo itens recuperados Podemos acessar o get. Saldo() diretamente após fazer contas. get(i)? Não podemos; lembre-se que toda lista trabalha sempre com Object. Assim, a referência devolvida pelo get(i) é do tipo Object, sendo necessário o cast para Conta. Corrente se quisermos acessar o get. Saldo() for (int i = 0; i < contas. size(); i++) { Conta. Corrente cc = (Conta. Corrente) contas. get(i); System. out. println(cc. get. Saldo()); }// note que a ordem dos elementos não é alterada

Acesso Aleatório e Percorrendo Listas com Get Algumas listas, como a Array. List, têm

Acesso Aleatório e Percorrendo Listas com Get Algumas listas, como a Array. List, têm acesso aleatório aos seus elementos: A busca por um elemento em uma determinada posição é feita de maneira imediata, sem que a lista inteira seja percorrida (que chamamos de acesso sequencial). Neste caso, o acesso através do método get(int) é muito rápido. Caso contrário, percorrer uma lista usando um for como esse que acabamos de ver, pode ser desastroso.

Listas: Java. Util. List Uma lista é uma excelente alternativa a um array comum

Listas: Java. Util. List Uma lista é uma excelente alternativa a um array comum Temos todos os benefícios de arrays, sem a necessidade de tomar cuidado com remoções, falta de espaço etc. A outra implementação muito usada, a Linked. List Fornece métodos adicionais para obter e remover o primeiro e último elemento da lista. Também tem o funcionamento interno diferente, o que pode impactar performance, como veremos em alguns exercícios

Coleções - Listas A tabela abaixo mostra os principais métodos de listas (Array. List

Coleções - Listas A tabela abaixo mostra os principais métodos de listas (Array. List e Linked. List). Tipo do método Nome do método Adição add(int index, Object elemento) Remoção remove(int index) Acesso get(int index) list. Iterator() Pesquisa index. Of (Object elemento)

A interface List O código abaixo mostra os principais métodos de List public interface

A interface List O código abaixo mostra os principais métodos de List public interface List extends Collection { // Positional Access Object get(int index); Object set(int index, Object element); void add(int index, Object element); Object remove(int index); abstract boolean add. All(int index, Collection c); // Search int index. Of(Object o); int last. Index. Of(Object o); // Iteration List. Iterator list. Iterator(); List. Iterator list. Iterator(int index); // Range-view List sub. List(int from, int to); }

Exemplo: Array. List import java. util. *; public class Exemplo. List { public static

Exemplo: Array. List import java. util. *; public class Exemplo. List { public static void main(String args[]) { List list = new Array. List(); list. add("Bernardo"); list. add("Elizabeth"); list. add("Geni"); list. add("Elizabeth"); list. add("Clara"); System. out. println(list); System. out. println("2: " + list. get(2)); System. out. println("0: " + list. get(0)); } 18

Exemplo: Linked. List import java. util. *; public class Examplo. Linked. List { public

Exemplo: Linked. List import java. util. *; public class Examplo. Linked. List { public static void main(String args[]) { Linked. List queue = new Linked. List(); queue. add. First("Bernardo"); queue. add. First("Elizabete"); queue. add. First("Geni"); queue. add. First("Elizabete"); queue. add. First("Clara"); System. out. println(queue); queue. remove. Last(); System. out. println(queue); } } 19

Listas com Generics Em qualquer lista, é possível colocar qualquer Object. Com isso, é

Listas com Generics Em qualquer lista, é possível colocar qualquer Object. Com isso, é possível misturar objetos: Mas e depois, na hora de recuperar esses objetos? Como o método get devolve um Object, precisamos fazer o cast. Mas com uma lista com vários objetos de tipos diferentes, isso pode não ser tão simples. . .

Listas com Generics • Repare no uso de um parâmetro ao lado de List

Listas com Generics • Repare no uso de um parâmetro ao lado de List e Array. List: • Indica que nossa lista foi criada para trabalhar exclusivamente com objetos do tipo Conta. Corrente. • Isso nos traz uma segurança em tempo de compilação: O uso de Generics também elimina a necessidade de casting, já que, seguramente, todos os objetos inseridos na lista serão do tipo Conta. Corrente

Importância das Interfaces nas coleções Para que precisamos retornar a referência específica a uma

Importância das Interfaces nas coleções Para que precisamos retornar a referência específica a uma Array. List? - Para que ser tão específico?

Importância das Interfaces nas coleções Para que precisamos retornar a referência específica a uma

Importância das Interfaces nas coleções Para que precisamos retornar a referência específica a uma Array. List? - Para que ser tão específico? Dessa maneira, o dia que optarmos por devolver uma Linked. List em vez de Array. List, as pessoas que estão usando o método busca. Todas. Contas poderão ter problemas

Importância das Interfaces nas coleções

Importância das Interfaces nas coleções

Resumo - Listas Pode haver duplicatas Mantém a ordem de inserção Array. List não

Resumo - Listas Pode haver duplicatas Mantém a ordem de inserção Array. List não é um Array!