SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
Tecnologia em Sistemas para Internet - IFMS
Aula 05 – Listas (parte 2)
Estruturas de Dados
Prof.º Msc. Sidney Roberto de Sousa
sidney.sousa@ifms.edu.br
Tec. em Sistemas para Internet - IFMS 2
O que veremos nesta aula?
●
Criando uma lista encadeada genérica
●
A interface List do pacote java.util
●
Formas de instanciação da interface List
Tec. em Sistemas para Internet - IFMS 3
Recapitulando...
●
Na aula anterior, vimos uma classe que
encapsula uma lista encadeada de valores
inteiros
●
Ou seja, uma instância daquela classe pode
armazenar um conjunto teoricamente infinito
de valores inteiros
Tec. em Sistemas para Internet - IFMS 4
Problema
●
Digamos que desejamos criar uma lista
encadeada para armazenar strings
●
O que devemos fazer? talvez possamos→
re-escrever a classe ListaEncadeada de tal
forma que ela possa armazenar strings ao
invés de valores inteiros
●
Problema resolvido!
Tec. em Sistemas para Internet - IFMS 5
Problema
●
Digamos que desejamos criar uma lista
encadeada para armazenar strings
●
O que devemos fazer? → talvez possamos
re-escrever a classe ListaEncadeada de tal
forma que ela possa armazenar strings ao
invés de valores inteiros
●
Problema resolvido!
?
Tec. em Sistemas para Internet - IFMS 6
Problema
●
Agora, digamos que estamos implementando
um sistema complexo, no qual precisaremos
utilizar listas de tipos variados →
possivelmente até tipos complexos
●
Ex.: lista de usuários, lista de clientes, lista de
pedidos, etc.
●
Solução: escrever uma cópia da classe
ListaEncadeada para cada tipo desejado!
Tec. em Sistemas para Internet - IFMS 7
Vamos realmente fazer isto?
Tec. em Sistemas para Internet - IFMS 8
Como resolver este problema?
●
Realmente, criar uma classe para cada tipo de
dados pode ser extremamente inviável!
●
A questão é: como escrever o código da classe
ListaEncadeada somente uma vez, porém
permitindo que o tipo do item a ser
armazenado possa ser definido apenas no
momento em que a lista for criada?
●
Ou seja, precisamos escrever uma classe
genérica!
Tec. em Sistemas para Internet - IFMS 9
Generics
●
Generics ou programação genérica em Java é
uma forma de determinar ao compilador qual
o tipo que deve ser interpretado em um
determinado trecho do programa
●
Isto facilita muito o reúso de software no→
nosso caso, escrever a classe ListaEncadeada
somente uma vez!
Tec. em Sistemas para Internet - IFMS 10
Classes NoGenerico e ListaEncadeadaGenerica
(abaixo no blog)
Tec. em Sistemas para Internet - IFMS 11
A classe NoGenerico
public class NoGenerico<T> {
    private T item;
    private NoGenerico<T> proximoItem;
    public NoGenerico() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
Tec. em Sistemas para Internet - IFMS 12
A classe NoGenerico
public class NoGenerico<T> {
    private T item;
    private NoGenerico<T> proximoItem;
    public NoGenerico() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
A classe NoGenerico
implementa um nó de uma lista
genérica. Assim, cada instância
da classe NoGenerico pode
armazenar um valor do tipo
desejado.
Tec. em Sistemas para Internet - IFMS 13
A classe NoGenerico
public class NoGenerico<T> {
    private T item;
    private NoGenerico<T> proximoItem;
    public NoGenerico() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
A letra T identifica um tipo genérico. Assim, a
classe NoGenerico pode utilizar o tipo genérico
T em seus atributos e métodos para especificar
o uso de um tipo que será definido
posteriormente pelo trecho de código que
utilizá-la. Você pode batizar o seu tipo genérico
conforme o seu gosto. Por convenção, tipos
genéricos são batizados com apenas uma letra
maiúscula.
Tec. em Sistemas para Internet - IFMS 14
A classe NoGenerico
public class NoGenerico<T> {
    private T item;
    private NoGenerico<T> proximoItem;
    public NoGenerico() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
Uma classe pode ter tantos tipos genéricos
forem necessários à sua implementação.
Obrigatoriamente, o trecho de código que
utilizar a classe que contém os tipos genéricos
deve definir qual será o tipo utilizado para cada
tipo genérico.
Tec. em Sistemas para Internet - IFMS 15
A classe NoGenerico
public class NoGenerico<T> {
    private T item;
    private NoGenerico<T> proximoItem;
    public NoGenerico() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
O valor do item a ser
armazenado é definido com o
tipo genérico.
Tec. em Sistemas para Internet - IFMS 16
A classe NoGenerico
public class NoGenerico<T> {
    private T item;
    private NoGenerico<T> proximoItem;
    public NoGenerico() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
O próximo item após o item atual. Note que no
instante da declaração do objeto é necessário
definir qual será o tipo a ser utilizado. Como ainda
não sabemos qual o tipo definitivo a ser utilizado,
associamos o tipo T ao tipo do valor do próximo
item.
Tec. em Sistemas para Internet - IFMS 17
A classe NoGenerico
public class NoGenerico<T> {
    private T item;
    private NoGenerico<T> proximoItem;
    public NoGenerico() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
O tipo genérico não precisa ser
especificado no construtor da
classe.
Tec. em Sistemas para Internet - IFMS 18
A classe ListaEncadeadaGenerica
●
Os métodos e atributos da classe
ListaEncadeadaGenerica são parecidos com
os da classe ListaEncadeada
●
Porém, o tipo genérico é utilizado sempre que
o tipo dos ítens armazenados precisa ser
referenciado
Tec. em Sistemas para Internet - IFMS 19
A classe ListaEncadeadaGenerica
public class ListaEncadeadaGenerica<T> {
    private int tamanho;
    private NoGenerico<T> primeiroItem;
    private NoGenerico<T> ultimoItem;
    public ListaEncadeadaGenerica() {
        primeiroItem = null;
        ultimoItem = null;
        tamanho = 0;
    }
    // Restante da classe...
}
Tec. em Sistemas para Internet - IFMS 20
A classe ListaEncadeadaGenerica
public class ListaEncadeadaGenerica<T> {
    private int tamanho;
    private NoGenerico<T> primeiroItem;
    private NoGenerico<T> ultimoItem;
    public ListaEncadeadaGenerica() {
        primeiroItem = null;
        ultimoItem = null;
        tamanho = 0;
    }
    // Restante da classe...
}
A classe ListaEncadeadaGenerica utiliza
o tipo genérico T para definir qual o tipo do
valor a ser armazenado em cada item. O
tipo genérico é propagado a cada item da
lista no momento de sua instanciação.
Tec. em Sistemas para Internet - IFMS 21
A classe ListaEncadeadaGenerica
public class ListaEncadeadaGenerica<T> {
    private int tamanho;
    private NoGenerico<T> primeiroItem;
    private NoGenerico<T> ultimoItem;
    public ListaEncadeadaGenerica() {
        primeiroItem = null;
        ultimoItem = null;
        tamanho = 0;
    }
    // Restante da classe...
}
O primeiro e último ítens da lista são criados com
o tipo genérico. Assim, quando a lista for criada,
estes ítens estarão preparados para armazenar
os valores desejados de forma apropriada.
Tec. em Sistemas para Internet - IFMS 22
Utilizando o tipo genérico nas operações da lista
public void adicionarNoInicio(T novoItem) {
    if (tamanho == 0) {
        primeiroItem = new NoGenerico<T>();
        primeiroItem.setItem(novoItem);
        ultimoItem = primeiroItem;
    } else {
        NoGenerico<T> antigoPrimeiroItem = primeiroItem;
        primeiroItem = new NoGenerico<T>();
        primeiroItem.setItem(novoItem);
        primeiroItem.setProximoItem(antigoPrimeiroItem);
    }
    tamanho++;
}
Tec. em Sistemas para Internet - IFMS 23
Utilizando o tipo genérico nas operações da lista
public void adicionarNoInicio(T novoItem) {
    if (tamanho == 0) {
        primeiroItem = new NoGenerico<T>();
        primeiroItem.setItem(novoItem);
        ultimoItem = primeiroItem;
    } else {
        NoGenerico<T> antigoPrimeiroItem = primeiroItem;
        primeiroItem = new NoGenerico<T>();
        primeiroItem.setItem(novoItem);
        primeiroItem.setProximoItem(antigoPrimeiroItem);
    }
    tamanho++;
}
Tec. em Sistemas para Internet - IFMS 24
Utilizando a lista encadeada genérica
ListaEncadeadaGenerica<String> listaEncadeada = new ListaEncadeadaGenerica<String>();
listaEncadeada.adicionarNoInicio("ao");
listaEncadeada.adicionarNoInicio("foi");
listaEncadeada.adicionarNoInicio("João");
listaEncadeada.adicionarNoFinal("bar");
listaEncadeada.adicionarNaPosicao("Paulo", 2);
NoGenerico<String> item = listaEncadeada.pegarItem(1);
// Imprime na tela:
// João Paulo foi ao bar
while (item != null) {
    System.out.print(item.getItem() + " ");
    item = item.getProximoItem();
}
Tec. em Sistemas para Internet - IFMS 25
Utilizando a lista encadeada genérica
ListaEncadeadaGenerica<Double> listaEncadeada = new ListaEncadeadaGenerica<Double>();
listaEncadeada.adicionarNoInicio(2.54);
listaEncadeada.adicionarNoInicio(­123.234);
listaEncadeada.adicionarNoInicio(0.1735);
listaEncadeada.adicionarNoFinal(76D);
listaEncadeada.adicionarNaPosicao(­981.39, 2);
NoGenerico<Double> item = listaEncadeada.pegarItem(1);
// Imprime na tela:
// 0.1735 ­981.39 ­123.234 2.54 76.0
while (item != null) {
    System.out.print(item.getItem() + " ");
    item = item.getProximoItem();
}
Tec. em Sistemas para Internet - IFMS 26
Classe Cliente
public class Cliente {
    private String cpf;
    private Date dataAniversario;
    private String nomeCompleto;
    private String endereco;
    // Getters e setters para os atributos...    
}
Tec. em Sistemas para Internet - IFMS 27
Criando uma lista de clientes
Cliente cliente1 = new Cliente();
cliente1.setNomeCompleto("Ana Leite");
Cliente cliente2 = new Cliente();
cliente2.setNomeCompleto("Augusto Macedo");
Cliente cliente3 = new Cliente();
cliente3.setNomeCompleto("Maria dos Anjos Toledo");
ListaEncadeadaGenerica<Cliente> listaEncadeada = new ListaEncadeadaGenerica<Cliente>();
listaEncadeada.adicionarNoFinal(cliente1);
listaEncadeada.adicionarNoInicio(cliente2);
listaEncadeada.adicionarNaPosicao(cliente3, 2);
NoGenerico<Cliente> item = listaEncadeada.pegarItem(1);
while (item != null) {
    System.out.println(item.getItem().getNomeCompleto());
    item = item.getProximoItem();
}
Tec. em Sistemas para Internet - IFMS 28
A interface List do pacote java.util
●
A interface List possui a definição de várias operações
sobre listas
●
É a alternativa mais adotada pelos programadores Java
para a utilização de listas
●
Por ser uma interface, ela não contém a implementação
dos seus métodos; apenas a assinatura destes.
●
Assim, existem duas implementações na JDK para o uso
da interface List:
●
A classe ArrayList
●
A classe LinkedList
Tec. em Sistemas para Internet - IFMS 29
Instanciando uma lista do tipo List
List<Integer> lista1 = new ArrayList<Integer>();
List<Integer> lista2 = new LinkedList<Integer>();
Tec. em Sistemas para Internet - IFMS 30
A classe ArrayList
●
A mais prática na maioria dos casos
●
Por baixo dos panos, ela:
●
Oferece de fato acesso direto a um item da lista
●
Não precisa alocar um novo nó para inserir um item novo
●
Na prática, a classe ArrayList implementa uma lista estática, de
tamanho inicial 10
●
Quando existe a necessidade de se inserir o décimo primeiro
item, a lista se redimensiona de forma implícita
●
No geral, tem melhor desempenho que a classe LinkedList
Tec. em Sistemas para Internet - IFMS 31
A classe ArrayList
(vantagens e desvantagens)
●
A mais prática na maioria dos casos
●
Por baixo dos panos, ela:
●
Oferece de fato acesso direto a um item da lista
●
Não precisa alocar um novo nó para inserir um item novo
●
Na prática, a classe ArrayList implementa uma lista estática,
de tamanho inicial 10
●
Quando existe a necessidade de se inserir o décimo primeiro
item, a lista se redimensiona de forma implícita
●
No geral, tem melhor desempenho que a classe LinkedList
Tec. em Sistemas para Internet - IFMS 32
A classe LinkedList
●
Implementa uma lista encadeada
●
O acesso ao primeiro e último ítens é feito de forma mais
rápida do que o oferecido pela classe ArrayList
●
Por ser uma lista encadeada, o acesso aos ítens
intermediários não é feito de forma direta
●
Não costuma ser mais prática que ArrayList na maioria
dos casos
●
Possui um melhor desempenho quando a inserção,
leitura e remoção dos ítens da lista costumam ocorrer
nas pontas da lista
Tec. em Sistemas para Internet - IFMS 33
A classe LinkedList
(vantagens e desvantagens)
●
Implementa uma lista encadeada
●
O acesso ao primeiro e último ítens é feito de forma
mais rápida do que o oferecido pela classe ArrayList
●
Por ser uma lista encadeada, o acesso aos ítens
intermediários não é feito de forma direta
●
Não costuma ser mais prática que ArrayList na
maioria dos casos
●
Possui um melhor desempenho quando a inserção,
leitura e remoção dos ítens da lista costumam ocorrer
nas pontas da lista
Tec. em Sistemas para Internet - IFMS 34
Utilizando a interface List
●
Como as classes ArrayList e LinkedList
implementam a classe List, elas
obrigatoriamente possuem a mesma assinatura
de métodos
●
Assim, independente da implementação
escolhida, o uso da interface List é feito da
mesma forma
●
A real diferença entre as implementações só é
percebida em termos de desempenho
Tec. em Sistemas para Internet - IFMS 35
Utilizando a interface List
Classe ExemploList
(abaixo no blog)
Tec. em Sistemas para Internet - IFMS 36
Adicionando ítens
// Inserindo ítens no final da lista
lista.add(12);
lista.add(­38);
lista.add(827);
// Inserindo ítens no início da lista
lista.add(0, 125);
lista.add(0, ­387);
lista.add(0, 82735);
Tec. em Sistemas para Internet - IFMS 37
Concatenando duas listas
List<Integer> listaExtra = new ArrayList<Integer>();
listaExtra.add(11);
listaExtra.add(22);
listaExtra.add(33);
// Adiciona todos os ítens da lista extra no final da 
// primeira lista
lista.addAll(listaExtra);
Tec. em Sistemas para Internet - IFMS 38
Inserindo uma lista no meio da outra
listaExtra.add(44);
listaExtra.add(55);
listaExtra.add(66);
/**
 * Adiciona todos os ítens da lista extra na posição  
 * desejada da primeira lista
 */
lista.addAll(3, listaExtra);
Tec. em Sistemas para Internet - IFMS 39
Removendo ítens por índice
/**
 * Removendo ítens da lista pelo índice. Na interface 
 * List, os elementos são indexados na forma 
 * [0..tamanho da lista ­ 1]
 */
lista.remove(0);
lista.remove(4);
Tec. em Sistemas para Internet - IFMS 40
Removendo ítens por ocorrência
/**
 * Removendo um item da lista caso ele exista. O cast 
 * para Object é necessário para que o compilador 
 * diferencie a chamada ao método de remoção por 
 * ocorrência do método de remoção por índice. Retorna 
 * true caso o item exista; false c.c.
 */
lista.remove((Object) 77); // Retorna false
Tec. em Sistemas para Internet - IFMS 41
Verificando a ocorrência de um item
// Verifica se um item está contido na lista
if (lista.contains(12)) {
    System.out.println("A lista contém o item 12.");
}
Tec. em Sistemas para Internet - IFMS 42
Pegando o índice de um ítem
// Imprime o índice da primeira ocorrência do item de 
// valor 125
System.out.println(lista.indexOf((Object) 125));
Tec. em Sistemas para Internet - IFMS 43
Verificando a ocorrência de uma sublista
// Verifica se a lista contém uma sublista
if (lista.containsAll(listaExtra)) {
    System.out.println("A primeira lista contém a lista extra!");
}
Tec. em Sistemas para Internet - IFMS 44
Substituindo um item
// Substituindo o elemento da terceira posição da lista
lista.set(3, 42);
Tec. em Sistemas para Internet - IFMS 45
Verificando se a lista está vazia
// Verifica se a lista está vazia
if (lista.isEmpty()) {
    System.out.println("A lista está vazia.");
} else {
    System.out.println("A lista contém " + lista.size() + " elemento(s).");
}
Tec. em Sistemas para Internet - IFMS 46
Verificando a última ocorrência de um valor na lista
System.out.println("A última ocorrência de 55 se dá na posição "
                   + lista.lastIndexOf(55));
Tec. em Sistemas para Internet - IFMS 47
Pegando o tamanho da lista
System.out.println("Tamanho atual da lista: " + lista.size());
Tec. em Sistemas para Internet - IFMS 48
Pegando partes da lista
/**
 * Pega uma parte da lista. O primeiro índice é inclusivo; o 
 * segundo é exclusivo.
 */
List<Integer> outraLista = lista.subList(2, 4);
Tec. em Sistemas para Internet - IFMS 49
Convertendo uma lista para vetor
// Converte a lista de inteiros em um vetor de objetos
Object[] vetor = lista.toArray();
// Converte a lista de inteiros em um vetor de inteiros
Integer[] vetorInteiros = new Integer[lista.size()];
lista.toArray(vetorInteiros);
Tec. em Sistemas para Internet - IFMS 50
Percorrendo uma lista
for (int i = 0; i < lista.size(); i++) {
    System.out.print(lista.get(i) + " ");
}
Tec. em Sistemas para Internet - IFMS 51
Percorrendo uma lista com o laço for each
for (Integer item : lista) {
    System.out.print(item + " ");
}
Tec. em Sistemas para Internet - IFMS 52
That's not all, folks!
Na próxima (e última) aula sobre listas, vamos
empileirar e enfileirar algumas coisas...

Mais conteúdo relacionado

Mais procurados (20)

Java1
Java1Java1
Java1
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
 
Java4
Java4Java4
Java4
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)
 
Curso Java I
Curso Java ICurso Java I
Curso Java I
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
Curso de Java (Parte 3)
 Curso de Java (Parte 3) Curso de Java (Parte 3)
Curso de Java (Parte 3)
 
Apostila: Curso de java III
Apostila: Curso de java IIIApostila: Curso de java III
Apostila: Curso de java III
 
Java7
Java7Java7
Java7
 
A linguagem java
A linguagem javaA linguagem java
A linguagem java
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 
Fascículo1java
Fascículo1javaFascículo1java
Fascículo1java
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Java11
Java11Java11
Java11
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
SFD - C# para a comunidade
SFD - C# para a comunidadeSFD - C# para a comunidade
SFD - C# para a comunidade
 
1707331929 ltp iv java original
1707331929 ltp iv   java original1707331929 ltp iv   java original
1707331929 ltp iv java original
 

Destaque

Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Sidney Roberto
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Sidney Roberto
 
Tecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoTecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoSidney Roberto
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em JavaSidney Roberto
 
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaPalestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaSidney Roberto
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaSidney Roberto
 
Introducao à Informatica Aplicada
Introducao à Informatica AplicadaIntroducao à Informatica Aplicada
Introducao à Informatica AplicadaClausia Antoneli
 
O que é Interação Humano-Computador?
O que é Interação Humano-Computador?O que é Interação Humano-Computador?
O que é Interação Humano-Computador?Sidney Roberto
 
O jogo da ética
O jogo da éticaO jogo da ética
O jogo da éticaChrys Souza
 
Aula I - Introdução ao Windows
Aula I - Introdução ao WindowsAula I - Introdução ao Windows
Aula I - Introdução ao WindowsJéssica Amaral
 

Destaque (14)

Listas (parte 1)
Listas (parte 1)Listas (parte 1)
Listas (parte 1)
 
Laços de Repetição
Laços de RepetiçãoLaços de Repetição
Laços de Repetição
 
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
 
Fatores Humanos
Fatores HumanosFatores Humanos
Fatores Humanos
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
 
Tecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoTecnologias e Mercado de Trabalho
Tecnologias e Mercado de Trabalho
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em Java
 
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaPalestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciência
 
Introducao à Informatica Aplicada
Introducao à Informatica AplicadaIntroducao à Informatica Aplicada
Introducao à Informatica Aplicada
 
O que é Interação Humano-Computador?
O que é Interação Humano-Computador?O que é Interação Humano-Computador?
O que é Interação Humano-Computador?
 
Informatica Aplicada
Informatica AplicadaInformatica Aplicada
Informatica Aplicada
 
O jogo da ética
O jogo da éticaO jogo da ética
O jogo da ética
 
Aula I - Introdução ao Windows
Aula I - Introdução ao WindowsAula I - Introdução ao Windows
Aula I - Introdução ao Windows
 

Semelhante a Listas (parte 2 de 3)

Python_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfPython_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfValter moreira
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIMario Guedes
 
Matrizes e Vetores para programação
Matrizes e Vetores para programaçãoMatrizes e Vetores para programação
Matrizes e Vetores para programaçãoKamila Joyce
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Java Desktop
Java DesktopJava Desktop
Java Desktopciceroclc
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetosMateus Parente
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...Manuel Menezes de Sequeira
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
Minicurso Latex PET Computação
Minicurso Latex PET ComputaçãoMinicurso Latex PET Computação
Minicurso Latex PET ComputaçãoAdams Silva
 

Semelhante a Listas (parte 2 de 3) (20)

Python_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfPython_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdf
 
Top0
Top0Top0
Top0
 
Top0
Top0Top0
Top0
 
Shell script
Shell script Shell script
Shell script
 
Pged 03
Pged 03Pged 03
Pged 03
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Aula5
Aula5Aula5
Aula5
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
 
Matrizes e Vetores para programação
Matrizes e Vetores para programaçãoMatrizes e Vetores para programação
Matrizes e Vetores para programação
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 
Aula5
Aula5Aula5
Aula5
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Minicurso Latex PET Computação
Minicurso Latex PET ComputaçãoMinicurso Latex PET Computação
Minicurso Latex PET Computação
 
Java
JavaJava
Java
 

Mais de Sidney Roberto

Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stackSidney Roberto
 
Personagens negros na cultura nerd
Personagens negros na cultura nerdPersonagens negros na cultura nerd
Personagens negros na cultura nerdSidney Roberto
 
Mantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDBMantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDBSidney Roberto
 
Regulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVRegulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVSidney Roberto
 
Regulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVRegulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVSidney Roberto
 
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQRegulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQSidney Roberto
 
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQRegulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQSidney Roberto
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidSidney Roberto
 
Minha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroMinha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroSidney Roberto
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de ProgramasSidney Roberto
 
Representação e Manipulação de Informações
Representação e Manipulação de InformaçõesRepresentação e Manipulação de Informações
Representação e Manipulação de InformaçõesSidney Roberto
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoSidney Roberto
 
Raciocínio Baseado em Casos
Raciocínio Baseado em CasosRaciocínio Baseado em Casos
Raciocínio Baseado em CasosSidney Roberto
 

Mais de Sidney Roberto (15)

Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stack
 
Personagens negros na cultura nerd
Personagens negros na cultura nerdPersonagens negros na cultura nerd
Personagens negros na cultura nerd
 
Mantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDBMantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDB
 
Regulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVRegulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IV
 
Regulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVRegulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IV
 
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQRegulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
 
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQRegulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para Android
 
Minha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroMinha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiro
 
Compilando em java
Compilando em javaCompilando em java
Compilando em java
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de Programas
 
Representação e Manipulação de Informações
Representação e Manipulação de InformaçõesRepresentação e Manipulação de Informações
Representação e Manipulação de Informações
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
 
Métodos Ágeis
Métodos ÁgeisMétodos Ágeis
Métodos Ágeis
 
Raciocínio Baseado em Casos
Raciocínio Baseado em CasosRaciocínio Baseado em Casos
Raciocínio Baseado em Casos
 

Listas (parte 2 de 3)

  • 1. Tecnologia em Sistemas para Internet - IFMS Aula 05 – Listas (parte 2) Estruturas de Dados Prof.º Msc. Sidney Roberto de Sousa sidney.sousa@ifms.edu.br
  • 2. Tec. em Sistemas para Internet - IFMS 2 O que veremos nesta aula? ● Criando uma lista encadeada genérica ● A interface List do pacote java.util ● Formas de instanciação da interface List
  • 3. Tec. em Sistemas para Internet - IFMS 3 Recapitulando... ● Na aula anterior, vimos uma classe que encapsula uma lista encadeada de valores inteiros ● Ou seja, uma instância daquela classe pode armazenar um conjunto teoricamente infinito de valores inteiros
  • 4. Tec. em Sistemas para Internet - IFMS 4 Problema ● Digamos que desejamos criar uma lista encadeada para armazenar strings ● O que devemos fazer? talvez possamos→ re-escrever a classe ListaEncadeada de tal forma que ela possa armazenar strings ao invés de valores inteiros ● Problema resolvido!
  • 5. Tec. em Sistemas para Internet - IFMS 5 Problema ● Digamos que desejamos criar uma lista encadeada para armazenar strings ● O que devemos fazer? → talvez possamos re-escrever a classe ListaEncadeada de tal forma que ela possa armazenar strings ao invés de valores inteiros ● Problema resolvido! ?
  • 6. Tec. em Sistemas para Internet - IFMS 6 Problema ● Agora, digamos que estamos implementando um sistema complexo, no qual precisaremos utilizar listas de tipos variados → possivelmente até tipos complexos ● Ex.: lista de usuários, lista de clientes, lista de pedidos, etc. ● Solução: escrever uma cópia da classe ListaEncadeada para cada tipo desejado!
  • 7. Tec. em Sistemas para Internet - IFMS 7 Vamos realmente fazer isto?
  • 8. Tec. em Sistemas para Internet - IFMS 8 Como resolver este problema? ● Realmente, criar uma classe para cada tipo de dados pode ser extremamente inviável! ● A questão é: como escrever o código da classe ListaEncadeada somente uma vez, porém permitindo que o tipo do item a ser armazenado possa ser definido apenas no momento em que a lista for criada? ● Ou seja, precisamos escrever uma classe genérica!
  • 9. Tec. em Sistemas para Internet - IFMS 9 Generics ● Generics ou programação genérica em Java é uma forma de determinar ao compilador qual o tipo que deve ser interpretado em um determinado trecho do programa ● Isto facilita muito o reúso de software no→ nosso caso, escrever a classe ListaEncadeada somente uma vez!
  • 10. Tec. em Sistemas para Internet - IFMS 10 Classes NoGenerico e ListaEncadeadaGenerica (abaixo no blog)
  • 11. Tec. em Sistemas para Internet - IFMS 11 A classe NoGenerico public class NoGenerico<T> {     private T item;     private NoGenerico<T> proximoItem;     public NoGenerico() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... }
  • 12. Tec. em Sistemas para Internet - IFMS 12 A classe NoGenerico public class NoGenerico<T> {     private T item;     private NoGenerico<T> proximoItem;     public NoGenerico() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } A classe NoGenerico implementa um nó de uma lista genérica. Assim, cada instância da classe NoGenerico pode armazenar um valor do tipo desejado.
  • 13. Tec. em Sistemas para Internet - IFMS 13 A classe NoGenerico public class NoGenerico<T> {     private T item;     private NoGenerico<T> proximoItem;     public NoGenerico() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } A letra T identifica um tipo genérico. Assim, a classe NoGenerico pode utilizar o tipo genérico T em seus atributos e métodos para especificar o uso de um tipo que será definido posteriormente pelo trecho de código que utilizá-la. Você pode batizar o seu tipo genérico conforme o seu gosto. Por convenção, tipos genéricos são batizados com apenas uma letra maiúscula.
  • 14. Tec. em Sistemas para Internet - IFMS 14 A classe NoGenerico public class NoGenerico<T> {     private T item;     private NoGenerico<T> proximoItem;     public NoGenerico() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } Uma classe pode ter tantos tipos genéricos forem necessários à sua implementação. Obrigatoriamente, o trecho de código que utilizar a classe que contém os tipos genéricos deve definir qual será o tipo utilizado para cada tipo genérico.
  • 15. Tec. em Sistemas para Internet - IFMS 15 A classe NoGenerico public class NoGenerico<T> {     private T item;     private NoGenerico<T> proximoItem;     public NoGenerico() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } O valor do item a ser armazenado é definido com o tipo genérico.
  • 16. Tec. em Sistemas para Internet - IFMS 16 A classe NoGenerico public class NoGenerico<T> {     private T item;     private NoGenerico<T> proximoItem;     public NoGenerico() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } O próximo item após o item atual. Note que no instante da declaração do objeto é necessário definir qual será o tipo a ser utilizado. Como ainda não sabemos qual o tipo definitivo a ser utilizado, associamos o tipo T ao tipo do valor do próximo item.
  • 17. Tec. em Sistemas para Internet - IFMS 17 A classe NoGenerico public class NoGenerico<T> {     private T item;     private NoGenerico<T> proximoItem;     public NoGenerico() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } O tipo genérico não precisa ser especificado no construtor da classe.
  • 18. Tec. em Sistemas para Internet - IFMS 18 A classe ListaEncadeadaGenerica ● Os métodos e atributos da classe ListaEncadeadaGenerica são parecidos com os da classe ListaEncadeada ● Porém, o tipo genérico é utilizado sempre que o tipo dos ítens armazenados precisa ser referenciado
  • 19. Tec. em Sistemas para Internet - IFMS 19 A classe ListaEncadeadaGenerica public class ListaEncadeadaGenerica<T> {     private int tamanho;     private NoGenerico<T> primeiroItem;     private NoGenerico<T> ultimoItem;     public ListaEncadeadaGenerica() {         primeiroItem = null;         ultimoItem = null;         tamanho = 0;     }     // Restante da classe... }
  • 20. Tec. em Sistemas para Internet - IFMS 20 A classe ListaEncadeadaGenerica public class ListaEncadeadaGenerica<T> {     private int tamanho;     private NoGenerico<T> primeiroItem;     private NoGenerico<T> ultimoItem;     public ListaEncadeadaGenerica() {         primeiroItem = null;         ultimoItem = null;         tamanho = 0;     }     // Restante da classe... } A classe ListaEncadeadaGenerica utiliza o tipo genérico T para definir qual o tipo do valor a ser armazenado em cada item. O tipo genérico é propagado a cada item da lista no momento de sua instanciação.
  • 21. Tec. em Sistemas para Internet - IFMS 21 A classe ListaEncadeadaGenerica public class ListaEncadeadaGenerica<T> {     private int tamanho;     private NoGenerico<T> primeiroItem;     private NoGenerico<T> ultimoItem;     public ListaEncadeadaGenerica() {         primeiroItem = null;         ultimoItem = null;         tamanho = 0;     }     // Restante da classe... } O primeiro e último ítens da lista são criados com o tipo genérico. Assim, quando a lista for criada, estes ítens estarão preparados para armazenar os valores desejados de forma apropriada.
  • 22. Tec. em Sistemas para Internet - IFMS 22 Utilizando o tipo genérico nas operações da lista public void adicionarNoInicio(T novoItem) {     if (tamanho == 0) {         primeiroItem = new NoGenerico<T>();         primeiroItem.setItem(novoItem);         ultimoItem = primeiroItem;     } else {         NoGenerico<T> antigoPrimeiroItem = primeiroItem;         primeiroItem = new NoGenerico<T>();         primeiroItem.setItem(novoItem);         primeiroItem.setProximoItem(antigoPrimeiroItem);     }     tamanho++; }
  • 23. Tec. em Sistemas para Internet - IFMS 23 Utilizando o tipo genérico nas operações da lista public void adicionarNoInicio(T novoItem) {     if (tamanho == 0) {         primeiroItem = new NoGenerico<T>();         primeiroItem.setItem(novoItem);         ultimoItem = primeiroItem;     } else {         NoGenerico<T> antigoPrimeiroItem = primeiroItem;         primeiroItem = new NoGenerico<T>();         primeiroItem.setItem(novoItem);         primeiroItem.setProximoItem(antigoPrimeiroItem);     }     tamanho++; }
  • 24. Tec. em Sistemas para Internet - IFMS 24 Utilizando a lista encadeada genérica ListaEncadeadaGenerica<String> listaEncadeada = new ListaEncadeadaGenerica<String>(); listaEncadeada.adicionarNoInicio("ao"); listaEncadeada.adicionarNoInicio("foi"); listaEncadeada.adicionarNoInicio("João"); listaEncadeada.adicionarNoFinal("bar"); listaEncadeada.adicionarNaPosicao("Paulo", 2); NoGenerico<String> item = listaEncadeada.pegarItem(1); // Imprime na tela: // João Paulo foi ao bar while (item != null) {     System.out.print(item.getItem() + " ");     item = item.getProximoItem(); }
  • 25. Tec. em Sistemas para Internet - IFMS 25 Utilizando a lista encadeada genérica ListaEncadeadaGenerica<Double> listaEncadeada = new ListaEncadeadaGenerica<Double>(); listaEncadeada.adicionarNoInicio(2.54); listaEncadeada.adicionarNoInicio(­123.234); listaEncadeada.adicionarNoInicio(0.1735); listaEncadeada.adicionarNoFinal(76D); listaEncadeada.adicionarNaPosicao(­981.39, 2); NoGenerico<Double> item = listaEncadeada.pegarItem(1); // Imprime na tela: // 0.1735 ­981.39 ­123.234 2.54 76.0 while (item != null) {     System.out.print(item.getItem() + " ");     item = item.getProximoItem(); }
  • 26. Tec. em Sistemas para Internet - IFMS 26 Classe Cliente public class Cliente {     private String cpf;     private Date dataAniversario;     private String nomeCompleto;     private String endereco;     // Getters e setters para os atributos...     }
  • 27. Tec. em Sistemas para Internet - IFMS 27 Criando uma lista de clientes Cliente cliente1 = new Cliente(); cliente1.setNomeCompleto("Ana Leite"); Cliente cliente2 = new Cliente(); cliente2.setNomeCompleto("Augusto Macedo"); Cliente cliente3 = new Cliente(); cliente3.setNomeCompleto("Maria dos Anjos Toledo"); ListaEncadeadaGenerica<Cliente> listaEncadeada = new ListaEncadeadaGenerica<Cliente>(); listaEncadeada.adicionarNoFinal(cliente1); listaEncadeada.adicionarNoInicio(cliente2); listaEncadeada.adicionarNaPosicao(cliente3, 2); NoGenerico<Cliente> item = listaEncadeada.pegarItem(1); while (item != null) {     System.out.println(item.getItem().getNomeCompleto());     item = item.getProximoItem(); }
  • 28. Tec. em Sistemas para Internet - IFMS 28 A interface List do pacote java.util ● A interface List possui a definição de várias operações sobre listas ● É a alternativa mais adotada pelos programadores Java para a utilização de listas ● Por ser uma interface, ela não contém a implementação dos seus métodos; apenas a assinatura destes. ● Assim, existem duas implementações na JDK para o uso da interface List: ● A classe ArrayList ● A classe LinkedList
  • 29. Tec. em Sistemas para Internet - IFMS 29 Instanciando uma lista do tipo List List<Integer> lista1 = new ArrayList<Integer>(); List<Integer> lista2 = new LinkedList<Integer>();
  • 30. Tec. em Sistemas para Internet - IFMS 30 A classe ArrayList ● A mais prática na maioria dos casos ● Por baixo dos panos, ela: ● Oferece de fato acesso direto a um item da lista ● Não precisa alocar um novo nó para inserir um item novo ● Na prática, a classe ArrayList implementa uma lista estática, de tamanho inicial 10 ● Quando existe a necessidade de se inserir o décimo primeiro item, a lista se redimensiona de forma implícita ● No geral, tem melhor desempenho que a classe LinkedList
  • 31. Tec. em Sistemas para Internet - IFMS 31 A classe ArrayList (vantagens e desvantagens) ● A mais prática na maioria dos casos ● Por baixo dos panos, ela: ● Oferece de fato acesso direto a um item da lista ● Não precisa alocar um novo nó para inserir um item novo ● Na prática, a classe ArrayList implementa uma lista estática, de tamanho inicial 10 ● Quando existe a necessidade de se inserir o décimo primeiro item, a lista se redimensiona de forma implícita ● No geral, tem melhor desempenho que a classe LinkedList
  • 32. Tec. em Sistemas para Internet - IFMS 32 A classe LinkedList ● Implementa uma lista encadeada ● O acesso ao primeiro e último ítens é feito de forma mais rápida do que o oferecido pela classe ArrayList ● Por ser uma lista encadeada, o acesso aos ítens intermediários não é feito de forma direta ● Não costuma ser mais prática que ArrayList na maioria dos casos ● Possui um melhor desempenho quando a inserção, leitura e remoção dos ítens da lista costumam ocorrer nas pontas da lista
  • 33. Tec. em Sistemas para Internet - IFMS 33 A classe LinkedList (vantagens e desvantagens) ● Implementa uma lista encadeada ● O acesso ao primeiro e último ítens é feito de forma mais rápida do que o oferecido pela classe ArrayList ● Por ser uma lista encadeada, o acesso aos ítens intermediários não é feito de forma direta ● Não costuma ser mais prática que ArrayList na maioria dos casos ● Possui um melhor desempenho quando a inserção, leitura e remoção dos ítens da lista costumam ocorrer nas pontas da lista
  • 34. Tec. em Sistemas para Internet - IFMS 34 Utilizando a interface List ● Como as classes ArrayList e LinkedList implementam a classe List, elas obrigatoriamente possuem a mesma assinatura de métodos ● Assim, independente da implementação escolhida, o uso da interface List é feito da mesma forma ● A real diferença entre as implementações só é percebida em termos de desempenho
  • 35. Tec. em Sistemas para Internet - IFMS 35 Utilizando a interface List Classe ExemploList (abaixo no blog)
  • 36. Tec. em Sistemas para Internet - IFMS 36 Adicionando ítens // Inserindo ítens no final da lista lista.add(12); lista.add(­38); lista.add(827); // Inserindo ítens no início da lista lista.add(0, 125); lista.add(0, ­387); lista.add(0, 82735);
  • 37. Tec. em Sistemas para Internet - IFMS 37 Concatenando duas listas List<Integer> listaExtra = new ArrayList<Integer>(); listaExtra.add(11); listaExtra.add(22); listaExtra.add(33); // Adiciona todos os ítens da lista extra no final da  // primeira lista lista.addAll(listaExtra);
  • 38. Tec. em Sistemas para Internet - IFMS 38 Inserindo uma lista no meio da outra listaExtra.add(44); listaExtra.add(55); listaExtra.add(66); /**  * Adiciona todos os ítens da lista extra na posição    * desejada da primeira lista  */ lista.addAll(3, listaExtra);
  • 39. Tec. em Sistemas para Internet - IFMS 39 Removendo ítens por índice /**  * Removendo ítens da lista pelo índice. Na interface   * List, os elementos são indexados na forma   * [0..tamanho da lista ­ 1]  */ lista.remove(0); lista.remove(4);
  • 40. Tec. em Sistemas para Internet - IFMS 40 Removendo ítens por ocorrência /**  * Removendo um item da lista caso ele exista. O cast   * para Object é necessário para que o compilador   * diferencie a chamada ao método de remoção por   * ocorrência do método de remoção por índice. Retorna   * true caso o item exista; false c.c.  */ lista.remove((Object) 77); // Retorna false
  • 41. Tec. em Sistemas para Internet - IFMS 41 Verificando a ocorrência de um item // Verifica se um item está contido na lista if (lista.contains(12)) {     System.out.println("A lista contém o item 12."); }
  • 42. Tec. em Sistemas para Internet - IFMS 42 Pegando o índice de um ítem // Imprime o índice da primeira ocorrência do item de  // valor 125 System.out.println(lista.indexOf((Object) 125));
  • 43. Tec. em Sistemas para Internet - IFMS 43 Verificando a ocorrência de uma sublista // Verifica se a lista contém uma sublista if (lista.containsAll(listaExtra)) {     System.out.println("A primeira lista contém a lista extra!"); }
  • 44. Tec. em Sistemas para Internet - IFMS 44 Substituindo um item // Substituindo o elemento da terceira posição da lista lista.set(3, 42);
  • 45. Tec. em Sistemas para Internet - IFMS 45 Verificando se a lista está vazia // Verifica se a lista está vazia if (lista.isEmpty()) {     System.out.println("A lista está vazia."); } else {     System.out.println("A lista contém " + lista.size() + " elemento(s)."); }
  • 46. Tec. em Sistemas para Internet - IFMS 46 Verificando a última ocorrência de um valor na lista System.out.println("A última ocorrência de 55 se dá na posição "                    + lista.lastIndexOf(55));
  • 47. Tec. em Sistemas para Internet - IFMS 47 Pegando o tamanho da lista System.out.println("Tamanho atual da lista: " + lista.size());
  • 48. Tec. em Sistemas para Internet - IFMS 48 Pegando partes da lista /**  * Pega uma parte da lista. O primeiro índice é inclusivo; o   * segundo é exclusivo.  */ List<Integer> outraLista = lista.subList(2, 4);
  • 49. Tec. em Sistemas para Internet - IFMS 49 Convertendo uma lista para vetor // Converte a lista de inteiros em um vetor de objetos Object[] vetor = lista.toArray(); // Converte a lista de inteiros em um vetor de inteiros Integer[] vetorInteiros = new Integer[lista.size()]; lista.toArray(vetorInteiros);
  • 50. Tec. em Sistemas para Internet - IFMS 50 Percorrendo uma lista for (int i = 0; i < lista.size(); i++) {     System.out.print(lista.get(i) + " "); }
  • 51. Tec. em Sistemas para Internet - IFMS 51 Percorrendo uma lista com o laço for each for (Integer item : lista) {     System.out.print(item + " "); }
  • 52. Tec. em Sistemas para Internet - IFMS 52 That's not all, folks! Na próxima (e última) aula sobre listas, vamos empileirar e enfileirar algumas coisas...