Baixe o app para aproveitar ainda mais
Prévia do material em texto
2019.2 PROGRAMAÇÃO II CCT0695 Aula 3 PROFESSORES: HENRIQUE TAVARES EDIBERTO MARIANO * 2019.2 MODELO COMPORTAMENTAL * 2019.2 * Java Collection Framework (Coleções) Coleção: estrutura de dados Vários objetos Objeto de agregação A fundação do framework de coleções do Java Declaração de uma coleção Collection<String> colecao = new ArrayList(); 2019.2 * Java Collection Framework (Coleções) API Collections Interfaces Manipulação independente dos detalhes da sua representação. Interfaces Collection Implementações Algoritmos 2019.2 * Java Collection Framework (Coleções) API Collections - Collection raiz da hierarquia de coleções interface base para todas as coleções manipular coleções com máxima generalidade Define operações como: adição (add), remoção (remove); esvaziamento (clear); tamanho (size); conversão para array (toArray); iterador (iterator); verificações de existência (contains e isEmpty). 2019.2 * Java Collection Framework (Coleções) Há ainda classes que implementam a interface Map ao invés da Collection, mesmo assim, faz parte da API Collection. API Collections - Implementações concretas das coleções estruturas de dados reutilizáveis. são 2019.2 * Java Collection Framework (Coleções) API Collections - Algoritmos Métodos (Busca e Ordenação) Implementar Interfaces das coleções Algoritmo shuffle Os algoritmos reverse, fill, copy, max, min Algoritmo binarySearch Algoritmos addAll, frequency, disjoint 2019.2 * Java Collection Framework (Coleções) Set <<interface>> Set HashSet LinkedHashSet TreeSet <<interface>> SortedSet <<interface>> Collection Pesquisa de dados + rápida do que obj tipo List inserção de dados é mais lenta Não precisa especificar a posição para adicionar um elemento conjuntos e pode ser implementado como instâncias das classes: HashSet ou TreeSet; Não aceita valores duplicados Os elementos não são ordenados, nem se mantém na ordem em que foram inseridos Set<String> colecaoSet = new HashSet <String> (); colecaoSet.add("Ediberto Mariano"); colecaoSet.add("Marta Rocha"); colecaoSet.add("Karla Danielle"); Sintaxe 2019.2 * Java Collection Framework (Coleções) Set - Exemplo package control; import java.util.HashSet; import java.util.Set; public class TestandoSet { public static void main(String[] args) { Set<String> colecaoSet = new HashSet<String>(); colecaoSet.add("Ediberto Mariano"); colecaoSet.add("Marta Rocha"); colecaoSet.add("Karla Danielle"); //dados duplicados não são inseridos no Set colecaoSet.add("Karla Danielle"); colecaoSet.add("Ediberto Mariano"); System.out.println("Tamanho coleção Set: "+colecaoSet.size()); int count = 0; for(String valor : colecaoSet){ System.out.println(++count + " -> " + valor); } } } 2019.2 * Java Collection Framework (Coleções) List <<interface>> List ArrayList Vector LinkedList <<interface>> Collection Ordenada (sequência) Elementos duplicados Índice numérico É como um array de tamanho variável Métodos de inserção e remoção Collection<String> nomes = new ArrayList(); nomes.add("Francisco Silva"); nomes.add("Marta Silva"); nomes.add("Ediberto Mariano"); nomes.add("Marta Silva"); nomes.add("Ediberto Mariano"); Sintaxe 2019.2 * Java Collection Framework (Coleções) List - Exemplo package package model; import java.util.Collection; import java.util.ArrayList; public class ColectionList { public static void main(String[] args) { Collection<String> nomes = new ArrayList(); nomes.add("Francisco Silva"); nomes.add("Marta Silva"); nomes.add("Ediberto Mariano"); nomes.add("Marta Silva"); nomes.add("Ediberto Mariano"); System.out.println("Lista de nomes: "+nomes); } } 2019.2 * Java Collection Framework (Coleções) Queue (Fila) <<interface>> Queue PriorityQueue LinkedList <<interface>> Collection Operações: (Além das herdadas de Collection) inserção (offer); remoção (remove, pool); inspeção (peek: para retornar o <head> da fila). forma de visualizar uma List, acesso às operações de “enfileirar” e “desenfileirar” alguma coisa. 2019.2 * Java Collection Framework (Coleções) Queue (Fila) - Exemplo package model; import java.util.LinkedList; import java.util.Queue; public class QueueL { public static void main(String[] args) { Queue<String> objQueue = new LinkedList<>(); // ADICIONANDO ELEMENTOS NA LISTA objQueue.add("EDIBERTO"); objQueue.add("KARLA"); objQueue.add("PEDRO"); System.out.println("ELEMENTOS DA LISTA " + objQueue); System.out.println("Exibindo o Elemento frontal = " + objQueue.peek()); System.out.println("REMOVENDO o Elemento frontal"); String nome = objQueue.remove(); //REMOVE O PRIMEIRO ELEMENTO DA LISTA } } 2019.2 * Java Collection Framework (Coleções) Map Não pode conter chaves duplicadas (= Set) Os valores podem ser repetidos para chaves diferentes. Cada chave mapeia para no máximo um valor. não possui uma ordem definida para percorrimento. Map<E> mapa = new Type(); Onde: E - é o objeto declarado, podendo ser classes Wrappers ou tipo de coleção. Type - é o tipo de objeto da coleção a ser usado. Sintaxe 2019.2 * Java Collection Framework (Coleções) Ordenação de Objetos (I) ELEMENTOS (tipo) ORDEM String alfabética Date cronológica ArrayList<String> obj = new ArrayList<String>(); obj.add("Ediberto Mariano"); obj.add("Armando"); obj.add("Izabel"); obj.add("Beatriz"); obj.add("Antonio Silva"); Sintaxe Collections.sort(obj); ordem crescente Collections.sort(obj, Collections.reverseOrder()); ordem decrescente 2019.2 * Java Collection Framework (Coleções) Ordenação de Objetos (II) Automaticamente Ordenação natural dos objetos de seu tipo 2019.2 * Java Collection Framework (Coleções) Escrevendo tipos comparáveis public interface Comparable<T>{ public int comparableTo(T o); } Estrutura possíveis retornos inteiro negativo: se objeto recebido como parâmetro < objeto atual; compareTo() zero: se o objeto recebido como parâmetro = objeto atual; inteiro positivo: se recebido como parâmetro > objeto atual Se objeto atual não puder ser comparado com o objeto passado como parâmetro, o método lança uma exceção. A classe que implementar a interface Comparable precisa implementar o método compareTo( ). 2019.2 * Java Collection Framework (Coleções) Ordenando tipos comparáveis - Exemplo //Criar a classe Aluno package control; public class Aluno { int matricula; String nome, cidade; // MÉTODO CONSTRUTOR public Aluno(int matricula, String nome, String cidade) { this.matricula = matricula; this.nome = nome; this.cidade = cidade; } public String toString() { return this.matricula + " " + this.nome + " " + this.cidade; } } 2019.2 * Java Collection Framework (Coleções) //Criar a interface InterfaceOrdena package control; import java.util.Comparator; public class InterfaceOrdena implements Comparator<Aluno> { // ORDENA POR MATRICULA DO ALUNO EM ORDEM CRESCENTE public int compare(Aluno a, Aluno b) { return a.matricula - b.matricula; } } Ordenando tipos comparáveis - Exemplo 2019.2 * Java Collection Framework (Coleções) //Criar a classe TestaCliente package model; import control.Aluno; import control.InterfaceOrdena;import java.util.ArrayList; import java.util.Collections; public class TestaCliente { public static void main (String[] args) { ArrayList<Aluno> alu = new ArrayList<Aluno>(); alu.add(new Aluno(1172, "Ediberto Mariano", "Rio de Janeiro")); alu.add(new Aluno(1171, "Pedro Victor", "São Paulo")); alu.add(new Aluno(1173, "Marta", "Belo Horizonte")); alu.add(new Aluno(1170, "Karla Martins", "Niteroi")); System.out.println("LISTA NÃO ORDENADA"); for (int i=0; i<alu.size(); i++) System.out.println(alu.get(i)); Collections.sort(alu, new InterfaceOrdena()); System.out.println("\nLISTA ORDENADA POR MATRICULA DO ALUNO EM ORDEM CRESCENTE "); for (int i=0; i<alu.size(); i++) System.out.println(alu.get(i)); } } Ordenando tipos comparáveis - Exemplo 2019.2 * Java Collection Framework (Coleções) Ordenação não natural (I) objetos que não implementam Comparable? objetos de uma forma diferente da sua ordenação natural? Comparator (Objetos que implementam esta interface encapsulam uma ordenação) public interface Comparator<T>{ int compare(T o1, T o2); } Estrutura 2019.2 * Java Collection Framework (Coleções) Ordenação não natural (II) compare() seus dois argumentos retorna inteiro negativo: se o primeiro objeto < segundo objeto inteiro positivo: se o primeiro objeto > segundo objeto zero: se o primeiro objeto = segundo objeto Se algum dos objetos for de um tipo inapropriado para o Comparator, o método lança uma exceção 2019.2 * Java Collection Framework (Coleções) Ordenação não natural (II) - Exemplo //Criar a classe Aluno package control; public class Aluno { int matricula; String nome, cidade; public Aluno(int matricula, String nome, String cidade) { this.matricula = matricula; this.nome = nome; this.cidade = cidade; } public Integer getMatricula() { return matricula; } public void setMatricula(Integer matricula) { this.matricula = matricula; } public String toString() { return this.matricula + " " + this.nome + " " + this.cidade; } } 2019.2 * Java Collection Framework (Coleções) Ordenação não natural (II) - Exemplo //Criar a interface InterfaceOrdena package control; import java.util.Comparator; public class InterfaceOrdena implements Comparator<Aluno> { // ORDENA POR MATRICULA DO ALUNO EM ORDEM CRESCENTE public int compare(Aluno a, Aluno b) { return a.matricula - b.matricula; } } 2019.2 * Java Collection Framework (Coleções) Ordenação não natural (II) - Exemplo //Criar a classe TestaCliente package model; import control.Aluno; import control.InterfaceOrdena; import java.util.ArrayList; import java.util.Collections; public class TestaCliente { public static void main (String[] args) { ArrayList<Aluno> alu = new ArrayList<Aluno>(); alu.add(new Aluno(1172, "Ediberto Mariano", "Rio de Janeiro")); alu.add(new Aluno(1171, "Pedro Victor", "São Paulo")); alu.add(new Aluno(1173, "Marta", "Belo Horizonte")); alu.add(new Aluno(1170, "Karla Martins", "Niteroi")); System.out.println("LISTA NÃO ORDENADA"); for (int i=0; i<alu.size(); i++) System.out.println(alu.get(i)); Collections.sort(alu, new InterfaceOrdena()); System.out.println("\nOrdenação não natural"); System.out.println("\nLISTA ORDENADA POR MATRICULA DO ALUNO EM ORDEM CRESCENTE "); for (int i=0; i<alu.size(); i++) System.out.println(alu.get(i)); } } 2019.2 * Java Collection Framework (Coleções) SortedSet elementos ordenados em ordem ascendente. Conjunto mantém ordem natural ou de acordo com um Comparator fornecido na criação do SortedSet Além das operações normais de um Set, disponibiliza operações para: Intervalo (subconjuntos); Pontos extremos; Acesso ao Comparator. Não precisa especificar a posição para adicionar um elemento Não aceita valores duplicados Os elementos não são ordenados, nem se mantém na ordem em que foram inseridos Set Sintaxe: SortedSet set = new TreeSet(); 2019.2 * Java Collection Framework (Coleções) Ordenação SortedSet - Exemplo package model; import java.util.Iterator; import java.util.SortedSet; import java.util.TreeSet; public class OrdenaSet { public static void main(String[] args) { SortedSet set = new TreeSet(); set.add("MELANCIA"); set.add("TANGERINA"); set.add("ABACATE"); set.add("CAJÚ"); Iterator iterator = set.iterator(); System.out.println("ORDENAÇÃO E MANIPULAÇÃO DE COLEÇÃO SortedSet"); System.out.println("PROFESSOR: EDIBERTO MARIANO\n"); System.out.println("EXIBIR TODOS OS ELEMENTOS EM ORDEM CRESCENTE"); while(iterator.hasNext()){ System.out.print(iterator.next().toString()+" "); } System.out.println("\n\nEXIBIR O SUBSET DE ABACATE ATÉ O ELEMENTO ANTES DE TANGERINA"); System.out.println(set.subSet("ABACATE","TANGERINA")); System.out.println("EXIBIR TODOS OS ELEMENTOS A PARTIR DO ELEMENTO - CAJÚ"); System.out.println(set.tailSet("CAJÚ")); System.out.println("EXIBIR TODOS ELEMENTOS ATÉ A POSIÇÃO - 1 DO ELEMENTO CAJÚ"); System.out.println(set.headSet("CAJÚ")); System.out.println("\nEXIBIR O PRIMEIRO ELEMENTO DO SET"); System.out.println(set.first()); System.out.println("\nEXIBIR O ULTIMO ELEMENTO DO SET"); System.out.println(set.last()); } } 2019.2 * Java Collection Framework (Coleções) Ordenação SortedSet – SAÍDA 2019.2 * Java Collection Framework (Coleções) SortedMap Mantém chaves Ordenadas Ascendentemente 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. Sintaxe: SortedMap<Integer, String> map = new TreeMap<Integer, String>(); 2019.2 * Java Collection Framework (Coleções) SortedMap - Métodos subMap (K deKey, K toKey): Retorna uma visualização da parte deste Mapa cujas chaves variam de fromKey, inclusive, a toKey, exclusivo. headMap (K toKey): Retorna uma vista da parte deste Mapa cujas chaves são estritamente menores que toKey. tailMap (K fromKey): Retorna uma visualização da parte deste Mapa cujas chaves são maiores ou iguais a fromKey. firstKey(): Retorna a primeira chave (mais baixa) atualmente neste mapa. lastKey(): Retorna a última chave (mais alta) atualmente neste mapa. comparator(): Retorna o Comparador usado para ordenar as chaves neste Mapa, ou null se este Mapa usa a ordenação natural de suas chaves. values (): Retorna uma visualização Collection dos valores contidos neste mapa. keySet (): Retorna uma visualização Set das chaves contidas neste mapa. entrySet (): Retorna uma visualização Set dos mapeamentos contidos neste mapa. 2019.2 * Java Collection Framework (Coleções) SortedMap - Exemplo package model; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; public class OrdenaMap { public static void main(String[] args) { SortedMap<Integer, String> map = new TreeMap<Integer, String>(); //CRIA UMA COLEÇÃO MAP COM SUAS CHAVES DESORDENADAS (FORA DE ORDEM) map.put( new Integer( 2 ), "EDIBERTO" ); map.put( new Integer( 3 ), "ADÃO MORAIS" ); map.put( new Integer( 4 ), "ANA CLARA" ); map.put( new Integer( 1 ), "AUDILENE MARIA" ); //Retorna uma visualização Set dos mapeamentos contidos neste mapa Set s = map.entrySet(); Iterator i = s.iterator();// Usando o iterador no SortedMap // SAÍDA ORDENADA POR CHAVE DO MAP. while (i.hasNext()) { Map.Entry m = (Map.Entry)i.next(); int key = (Integer)m.getKey(); String value = (String)m.getValue(); System.out.println( "Chave : " + key + " Valor : " + value); } } } 2019.2 * Java Collection Framework (Coleções) Implementações - Classes que implementam as interfaces do framework de coleções. 2019.2 * Java Collection Framework (Coleções) Interfaces auxiliares (Iterator e ListIterator) - Iterator Interface que define as operações básicas para o percorrimento dos elementos da coleção. 2019.2 * Java Collection Framework (Coleções) - iterar sobre os elementos de uma coleção Pode-se usar o comando for e o Iterator da coleção: package model; import java.util.Arrays; import java.util.List; public class ForTeste { public static void main(String[] args) { List<Integer> itens = Arrays.asList( 30, 8, 40, 5, 11 ); for(Integer item : itens){ System.out.println(item); } } } USO DO COMANDO FOR Interfaces auxiliar (Iterator) 2019.2 * Java Collection Framework (Coleções) Iterator – (Listando os elementos de um ArrayList - Exemplo package model; import java.util.ArrayList; import java.util.Iterator; public class TestaIterator { public static void main(String args[]) { ArrayList al = new ArrayList(); al.add("EDIBERTO"); al.add("PEDRO"); al.add("ANTONIO"); System.out.print("USANDO O Iterator DA COLEÇÃO"); System.out.println(); System.out.print("PROFESSOR: EDIBERTO MARIANO"); System.out.println(); System.out.print(" "); System.out.println(); // Usamos o iterator para mostrar o conteúdo do ArrayList System.out.print("ELEMENTOS ORIGINAIS DO ARRAYLIST: "); Iterator itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); } } USO DO Iterator DA COLEÇÃO 2019.2 * Java Collection Framework (Coleções) Interface auxiliar - ListIterator Interface que estende Iterator, adicionando funções específicas para coleções do tipo List. 2019.2 * Java Collection Framework (Coleções) Interface auxiliar – ListIterator (exemplo) package model; import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; public class TestaListIterator { public static void main(String args[]) { ArrayList al = new ArrayList(); al.add("EDIBERTO"); al.add("PEDRO"); al.add("ANTONIO"); System.out.print("ELEMENTOS DO ARRAYLIST ORDEM ORIGINAL");System.out.println(); Iterator itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); System.out.println(); // Modify objects being iterated ListIterator litr = al.listIterator(); while(litr.hasNext()) { Object element = litr.next(); litr.set(element + " "); } System.out.print("ELEMENTOS DO ARRAYLIST ORDEM INVERTIDA"); System.out.println(); while(litr.hasPrevious()) { Object element = litr.previous(); System.out.print(element + " "); } System.out.println(); } } 2019.2 * Java Collection Framework (Coleções) for-each - Novidade do Java 5! - Variação do comando for com sintaxe simplificada para iterar nos elementos de uma coleção. 2019.2 * Java Collection Framework (Coleções) for-each (Listando os elementos de uma lista - Exemplo package model; import java.util.Arrays; import java.util.List; public class ForEachTeste { public static void main(String[] args) { List<Integer> itens = Arrays.asList( 10, 8, 50, 1, 30 ); itens.forEach(item->System.out.println(item)); } } 2019.2 * Exercícios 1 – Codifique um programa usando Collection List em que: a – Crie um Array, atribuindo os nomes de cinco pessoas; b – Exiba na tela a: b1 – o Array com todos seus elementos; b2 – elemento por elemento do Array. 2 - Codifique um programa usando Collection Set em que: a – seja informado via teclado com uso da classe Scanner cinco nomes de frutas em uma coleção; b – exiba na tela a: b1 – os elementos os elementos da coleção; b1 – mensagem informando se foram informados nomes repetidos ou não na coleção. 3 – Codifique um programa usando o comando for-each C para listar os elementos de uma Lista: Obs. Os elementos da lista deverão ser informados via teclado com uso da classe Scanner. 2019.2 * Exercícios 4 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado o primeiro nome de cinco pessoas; b – Use a classe Scanner para a entrada dos dados. 5 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado o primeiro nome de cinco pessoas; b – Use a classe Scanner para a entrada dos dados. c – Após todos os nomes armazenados na lista, exiba-os na tela 6 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado cinco números tipo inteiros; b – Use a classe Scanner para a entrada dos dados. c – Após todos os números armazenados na lista, exiba-os na tela 7 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado cinco números tipo inteiros; b – Use a classe Scanner para a entrada dos dados. c – Após todos os números armazenados na lista, exiba-os na tela usando o comando for-each 2019.2 * Exercícios 8 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado cinco números tipo inteiros; b – Use a classe Scanner para a entrada dos dados. c – Após todos os números armazenados na lista, exiba-os na tela usando o comando for 9 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado o primeiro nome de cinco pessoas; b – Use a classe Scanner para a entrada dos dados. c – Após todos os nomes armazenados na lista, exiba-os na tela usando o comando for-each. 10 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado o primeiro nome de cinco pessoas; b – Use a classe Scanner para a entrada dos dados. c – Após todos os nomes armazenados na lista, exiba-os na tela usando o comando for 11 – Codifique um programa usando Collection QUEUE em que: a – atribua via programa os nomes de dez frutas em uma coleção. b – exiba os dados inseridos na coleção. 12 – Quais as características da interface Set? 13 - Codifique em java, as linhas de códigos para criar uma Coleção List() e adicionar dois elementos na lista criada. 2019.2 * Exercícios 12 - Codifique um programa usando Collection QUEUE em que: a – atribua via programa os números 100, 150 e 200 em uma coleção. b – exiba os números inseridos na coleção. 13 – Quais as características da interface Set? 14 - Codifique em java, as linhas de códigos para criar uma Coleção List() e adicionar dois elementos na lista criada. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Compartilhar