Coleções - continuação. Profa. Thienne Johnson EACH/USP

Documentos relacionados
JAVA COLLECTIONS API: LISTAS

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Coleções. Prof. Marcelo Roberto Zorzan

Programação Orientada a Objetos. Collections - Java

Programação Orientada a Objetos

Coleções by Pearson Education do Brasil

Collections Framework

Lista encadeada class No { Coleções. Enumeration. Lista encadeada (continuação) Enumeration Exemplo usando a classe Lista anterior

Java Util Collections - Interfaces Interfaces definidas

Instituto Federal de Educação, Ciência e Tecnologia da Bahia Campus Irecê Disciplina: Linguagem Técnica II Prof o Jonatas Bastos

Laboratório de Programação. Aula 13 Java 5COP088. Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr barbon@uel.

API e Coleções Java. Sérgio Luiz Ruivace Cerqueira

Interface Collection. Coleções em Java Collections Genéricos em Java - Generics. Interface Collection

Alberto Costa Neto DComp - UFS. Coleções

Collections. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

I.1 Introdução BitSet I.2 Manipulação de bits e os operadores de bits E sobre bits & OU inclusivo sobre bits OU exclusivo sobre bits

Orientação a Objetos AULA 09

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

Java Standard Edition (JSE)

Tratamento de Exceções. Profa. Thienne Johnson EACH/USP

Vetores Unimensionais

Coleções em Java. Prof. Gustavo Willam Pereira ENG10082 Programação II. Créditos: Prof. Clayton Vieira Fraga Filho

Classes, instâncias e métodos de acesso. prática

MODEL-VIEW-CONTROLER. Prof. Fellipe Aleixo

Introdução. Coleção HashMap Classe Java. Interesse

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Paradigmas da Programação PPROG. Tipos de Dados. Enumerados Genéricos Coleções. Nelson Freire (ISEP DEI-PPROG 2012/13) 1/64

Métodos Genéricos. Prof.: Michele Nasu Tomiyama Bucci

Exercícios Resolvidos. Java Básico

Paradigmas da Programação PPROG. Tipos Enumerados. Nelson Freire (ISEP DEI-PPROG 2013/14) 1/20

Introdução a classes e objetos by Pearson Education do Brasil

LÓGICA DE PROGRAMAÇÃO (JAVA) ESTRUTURAS REPETIÇÃO. Professor Carlos Muniz

Programação Java. em Ambiente Distribuído. Ênfase no Mapeamento Objeto-Relacional com JPA, EJB e Hibernate. Douglas Rocha Mendes.

private static Ascii ascii = new Ascii(); static List<Character> asciinumber = ascii.getasciitable(); Scanner input = new Scanner(System.

O JUnit permite a realização de testes de unidades, conhecidos como "caixa branca", facilitando assim a correção de métodos e objetos.

Vetores Unimensionais

Programação Orientada a Objetos. Desenvolvimento. Desenvolvimento. Desenvolvimento. Alexandre César Muniz de Oliveira. Parte II

Aula 4. TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2014 Marcelo Henrique dos Santos -

LÓGICA DE PROGRAMAÇÃO (JAVA) VARIÁVEIS. Professor Carlos Muniz

4 TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

JAVA. Professor: Bruno Toledo

BSI UFRPE Prof. Gustavo Callou

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 6 Filas

Recursividade. Prof. Jesus José de Oliveira Neto

AULA 6 - ARRAYS. Array de 10 elementos

Coleções POO. Prof. Marcio Delamaro

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Programação Orientada a Objetos

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Técnicas de Programação Avançada TCC Prof.: Anselmo Montenegro

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Coleções. Programação Orientada a Objetos Java. Prof. Geraldo Braz Junior

Algoritmos e Programação II. Coleções. Coleções. Baseado no material do Prof. Julio

Java Coleções. Rodrigo C. de Azevedo

Coleções Avançadas. Programação Orientada a Objetos Java. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Técnicas de Programação II

Capítulo 21. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Vetores Unimensionais

Programação Orientada a Objetos II

Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP

AULA TEÓRICA 7 Tema 7. Colecções (cont.) Vector Ø Criação Ø Manipulação

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins

Interfaces POO. Prof. Marcio Delamaro

Transcrição:

Coleções - continuação Profa. Thienne Johnson EACH/USP

Java, como programar, 6ª edição Deitel & Deitel Capítulo 19

A estrutura de coleções fornece vários algoritmos para operações em coleções Esses algoritmos estão implementados como métodos static da classe Collections 3

Algoritmos que operam em objetos da classe List: sort: classifica os elementos da lista binarysearch: localiza um elemento da lista reverse: inverte os elementos da lista shuffle: embaralha os elementos da lista fill: preenche uma lista copy: copia referências de uma lista em outra lista 4

Algoritmos que operam em objetos da classe Collection: min: retorna o menor elemento em uma coleção max: retorna o maior elemento em uma coleção frequency: calcula quantos elementos em uma coleção são iguais a um elemento especificado disjoint: determina se duas coleções não têm nenhum elemento em comum 5

O algoritmo sort classifica (ordena) os elementos de uma lista List os tipos dos elementos da lista devem implementar a interface Comparable A ordem entre os elementos da lista é determinada pela ordem natural do tipo dos elementos esquema implementado pela classe no método compareto 6

import java.util.list; import java.util.arrays; import java.util.collections; Classifica os elementos de uma lista em ordem crescente public class Sort1 private static final String suits[] = "Hearts", "Diamonds", "Clubs", "Spades" }; public void printelements() // exibe elementos do array List< String > list = Arrays.asList( suits ); // cria List // gera saída da lista System.out.printf( "Unsorted array elements:\n%s\n", list); Collections.sort( list ); // classifica ArrayList // gera saída da lista System.out.printf( "Sorted array elements:\n%s\n", list); } // fim do método printelements 7

Chama o método aslist da classe Arrays import java.util.list; import java.util.arrays; import java.util.collections; para permitir que o conteúdo do array seja manipulado como uma lista public class Sort1 private static final String suits[] = "Hearts", "Diamonds", "Clubs", "Spades" }; public void printelements() // exibe elementos do array List< String > list = Arrays.asList( suits ); // cria List // gera saída da lista System.out.printf( "Unsorted array elements:\n%s\n", list); Collections.sort( list ); // classifica ArrayList // gera saída da lista System.out.printf( "Sorted array elements:\n%s\n", list); } // fim do método printelements 8

import java.util.list; import java.util.arrays; import java.util.collections; Chamada implícita ao método tostring public class Sort1 private static final String suits[] = "Hearts", "Diamonds", "Clubs", "Spades" }; da classe List para gerar a saída do conteúdo da lista public void printelements() // exibe elementos do array List< String > list = Arrays.asList( suits ); // cria List // gera saída da lista System.out.printf( "Unsorted array elements:\n%s\n", list); Collections.sort( list ); // classifica ArrayList // gera saída da lista System.out.printf( "Sorted array elements:\n%s\n", list); } // fim do método printelements 9

import java.util.list; import java.util.arrays; import java.util.collections; public class Sort1 private static final String suits[] = "Hearts", "Diamonds", "Clubs", "Spades" }; Classifica a lista list public void printelements() // exibe elementos do array List< String > list = Arrays.asList( suits ); // cria List em ordem crescente // gera saída da lista System.out.printf( "Unsorted array elements:\n%s\n", list); Collections.sort( list ); // classifica ArrayList // gera saída da lista System.out.printf( "Sorted array elements:\n%s\n", list); } // fim do método printelements 10

O algoritmo BinarySearch tenta localizar um elemento em uma lista List se o elemento for encontrado, seu índice é retornado se o elemento não for encontrado, o algoritmo retorna um valor negativo 11

Algoritmo BinarySearch Observação: o algoritmo BinarySearch espera que os elementos da lista estejam classificados em ordem crescente 12

Utiliza o algoritmo BinarySearch para procurar uma série de strings em uma ArrayList import java.util.list; import java.util.arrays; import java.util.collections; import java.util.arraylist; public class BinarySearchTest private static final String colors[] = "red", "white", "blue", "black", "yellow", "purple", "tan", "pink" }; private List< String > list; // ArrayList reference // cria, classifica e gera a saída da lista public BinarySearchTest() list = new ArrayList< String >( Arrays.asList( colors ) ); Collections.sort( list ); // sort the ArrayList System.out.printf( "Sorted ArrayList: %s\n", list ); } // end BinarySearchTest constructor 13

import java.util.list; import java.util.arrays; import java.util.collections; import java.util.arraylist; public class BinarySearchTest private static final String colors[] = "red", "white", "blue", "black", "yellow", "purple", "tan", "pink" }; private List< String > list; // ArrayList reference Classifica a lista com o método sort da interface Collection // cria, classifica e gera a saída da lista public BinarySearchTest() list = new ArrayList< String >( Arrays.asList( colors ) ); Collections.sort( list ); // sort the ArrayList System.out.printf( "Sorted ArrayList: %s\n", list ); } // end BinarySearchTest constructor 14

import java.util.list; import java.util.arrays; import java.util.collections; import java.util.arraylist; public class BinarySearchTest private static final String colors[] = "red", "white", "blue", "black", "yellow", "purple", "tan", "pink" }; private List< String > list; // ArrayList reference // cria, classifica e gera a saída da lista public BinarySearchTest() Gera a saída da lista classificada list = new ArrayList< String >( Arrays.asList( colors ) ); Collections.sort( list ); // sort the ArrayList System.out.printf( "Sorted ArrayList: %s\n", list ); } // end BinarySearchTest constructor 15

Realiza a pesquisa e envia o resultado para a saída private void printsearchresults( String key ) int result = 0; System.out.printf( "\n Buscando o elemento: %s\n", key ); result = Collections.binarySearch( list, key ); if ( result >= 0 ) System.out.printf( Elemento encontrado no índice %d\n", result ); else System.out.printf( Elemento não encontrado! (%d)\n",result ); } // fim do método printsearchresults 16

Chama o método binarysearch da interface Collection para buscar um elemento (key) em uma lista (list) private void printsearchresults( String key ) int result = 0; System.out.printf( "\n Buscando o elemento: %s\n", key ); result = Collections.binarySearch( list, key ); if ( result >= 0 ) System.out.printf( Elemento encontrado no índice %d\n", result ); else System.out.printf( Elemento não encontrado! (%d)\n",result ); } // fim do método printsearchresults 17

Um conjunto (Set) é uma coleção que contém elementos únicos não duplicados A classe HashSet implementa a interface Set 18

Exemplo de um método que aceita um argumento Collection e constrói uma coleção HashSet a partir desse argumento private void printnonduplicates( Collection< String > collection ) // create a HashSet Set< String > set = new HashSet< String >( collection ); System.out.println( "\n A coleção sem duplicatas: " ); for ( String s : set ) System.out.printf( "%s ", s ); System.out.println(); } // end method printnonduplicates 19

Por definição, coleções da classe Set não contêm duplicatas, então quando a coleção HashSet é construída, ela remove quaisquer duplicatas passadas pelo argumento Collection private void printnonduplicates( Collection< String > collection ) // create a HashSet Set< String > set = new HashSet< String >( collection ); System.out.println( "\n A coleção sem duplicatas: " ); for ( String s : set ) System.out.printf( "%s ", s ); System.out.println(); } // end method printnonduplicates 20

import java.util.list; import java.util.arrays; import java.util.hashset; import java.util.set; import java.util.collection; public class SetTest private static final String colors[] = vermelho", branco", azul", verde", cinza", laranja", amarelo", branco", rosa", violeta", cinza", laranja" }; public SetTest() List< String > list = Arrays.asList( colors ); System.out.printf( "ArrayList: %s\n", list ); printnonduplicates( list ); } // end SetTest constructor public static void main( String args[] ) new SetTest(); } // end main } // end class SetTest Qual é a saída desse programa? 21

Saída do programa: ArrayList: [vermelho, branco, azul, verde, cinza, laranja, amarelo, branco, rosa, violeta, cinza, laranja] A coleção sem duplicatas: vermelho branco azul verde cinza laranja amarelo rosa violeta 22

A estrutura de coleções também inclui a interface SortedSet: estende a interface Set representa conjuntos que mantêm seus elementos ordenados A classe TreeSet implementa a interface SortedSet 23

HashSet is much faster than TreeSet but offers no ordering guarantees. If you need to use the operations in the SortedSet interface, or if value-ordered iteration is required, use TreeSet; otherwise, use HashSet. It's a fair bet that you'll end up using HashSet most of the time.

Insere strings em uma coleção TreeSet import java.util.arrays; import java.util.sortedset; import java.util.treeset; public class SortedSetTest private static final String names[] = amarelo", verde", preto", marrom", cinza", branco", laranja", vermelho", verde" }; // create a sorted set with TreeSet, then manipulate it public SortedSetTest() // create TreeSet SortedSet< String > tree = new TreeSet< String >( Arrays.asList( names ) ); 25

Coleção TreeSet import java.util.arrays; import java.util.sortedset; import java.util.treeset; public class SortedSetTest private static final String names[] = "yellow", "green", "black", "tan", "grey", "white", "orange", "red", "green" }; As strings são classificadas à medida em que são adicionadas à coleção TreeSet // create a sorted set with TreeSet, then manipulate it public SortedSetTest() // create TreeSet SortedSet< String > tree = new TreeSet< String >( Arrays.asList( names ) ); 26

Coleção TreeSet System.out.println( conjunto ordenado: " ); printset( tree ); Gera a saída do conjunto inicial de strings utilizando o método printset 27

Coleção TreeSet Aceita uma coleção SortedSet como argumento e a imprime private void printset( SortedSet< String > set ) for ( String s : set ) System.out.print( s + " " ); } System.out.println(); 28

Coleção TreeSet System.out.println( conjunto ordenado: " ); printset( tree ); Saída: conjunto ordenado: amarelo branco cinza laranja marrom preto verde vermelho 29

Coleção TreeSet System.out.print( "\n headset (\ laranja\"): " ); printset( tree.headset( laranja" ) ); Chama o método headset da classe TreeSet para obter um subconjunto em que cada elemento é menor do que laranja 30

Coleção TreeSet System.out.print( "\n headset (\ laranja\"): " ); printset( tree.headset( laranja" ) ); Saída: conjunto ordenado: amarelo branco cinza laranja marrom preto verde vermelho headset( laranja ): amarelo branco cinza 31

Coleção TreeSet System.out.print( "\n tailset (\ laranja\"): " ); printset( tree.tailset( laranja" ) ); Chama o método tailset da classe TreeSet para obter um subconjunto em que cada elemento é maior ou igual a laranja 32

Coleção TreeSet System.out.print( "\n tailset (\ laranja\"): " ); printset( tree.tailset( laranja" ) ); Saída: conjunto ordenado: amarelo branco cinza laranja marrom preto verde vermelho headset( laranja ): amarelo branco cinza tailset( laranja ): laranja marrom preto verde vermelho 33

Coleção TreeSet System.out.printf( "first: %s\n", tree.first() ); System.out.printf( "last : %s\n", tree.last() ); Chama os métodos first e last da classe TreeSet para obter o menor e o maior elementos do conjunto 34

Coleção TreeSet System.out.printf( "first: %s\n", tree.first() ); System.out.printf( "last : %s\n", tree.last() ); Saída: conjunto ordenado: amarelo branco cinza laranja marrom preto verde vermelho headset( laranja ): amarelo branco cinza tailset( laranja ): laranja marrom preto verde vermelho first: amarelo last: vermelho 35

Um mapa (Map) associa chaves a valores e não pode conter chaves duplicatas cada chave pode mapear somente um valor (mapeamento um para um) Classes que implementam a interface Map HashMap TreeMap 36

If you need key-ordered Collection-view iteration, use TreeMap; If you want maximum speed and don't care about iteration order, use HashMap;

A interface (SortedMap) estende a interface Map e mantém as suas chaves ordenadas A classe TreeMap implementa a interface SortedMap 38

Coleção HashMap Utiliza uma coleção HashMap para contar o número de ocorrências de cada palavra em uma string import java.util.stringtokenizer; import java.util.map; import java.util.hashmap; import java.util.set; import java.util.treeset; import java.util.scanner; public class WordTypeCount private Map< String, Integer > map; private Scanner scanner; public WordTypeCount() map = new HashMap< String, Integer >(); // cria HashMap scanner = new Scanner( System.in ); // cria scanner createmap(); // cria mapa baseado na entrada do usuário displaymap(); // apresenta conteúdo do mapa }//fim do construtor de WordTypeCount 39

Coleção HashMap 1. import java.util.stringtokenizer; 2. import java.util.map; 3. import java.util.hashmap; 4. import java.util.set; 5. import java.util.treeset; 6. import java.util.scanner; Cria uma coleção HashMap vazia com chaves do tipo 1. public class WordTypeCount 2. Stringprivate e valores Map< do String, tipo Integer > map; 3. private Scanner scanner; 4. public WordTypeCount() 5. map = new HashMap< String, Integer >(); // cria HashMap 6. scanner = new Scanner( System.in ); // cria scanner 7. createmap(); // cria mapa baseado na entrada do usuário 8. displaymap(); // apresenta conteúdo do mapa 9. }//fim do construtor de WordTypeCount 40

Coleção HashMap 1. import java.util.stringtokenizer; 2. import java.util.map; 3. import java.util.hashmap; 4. import java.util.set; 5. import java.util.treeset; 6. import java.util.scanner; Cria uma objeto Scanner que lê a entrada do usuário 1. public class WordTypeCount 2. private Map< String, Integer > map; 3. private Scanner scanner; 4. public WordTypeCount() 5. map = new HashMap< String, Integer >(); // cria HashMap 6. scanner = new Scanner( System.in ); // cria scanner 7. createmap(); // cria mapa baseado na entrada do usuário 8. displaymap(); // apresenta conteúdo do mapa 9. }//fim do construtor de WordTypeCount a partir do fluxo de entrada padrão 41

Coleção HashMap 1. import java.util.stringtokenizer; 2. import java.util.map; 3. import java.util.hashmap; 4. import java.util.set; 5. import java.util.treeset; 6. import java.util.scanner; 1. public class WordTypeCount 2. private Map< String, Integer > map; 3. private Scanner scanner; 4. public WordTypeCount() 5. map = new HashMap< String, Integer >(); // cria HashMap 6. scanner = new Scanner( System.in ); // cria scanner 7. createmap(); // cria mapa baseado na entrada do usuário 8. displaymap(); // apresenta conteúdo do mapa 9. }//fim do construtor de WordTypeCount Chama o método createmap para armazenar no mapa o número de ocorrências de cada palavra na frase 42

Coleção HashMap Método createmap: armazena em um mapa o número de ocorrências de cada palavra na frase do usuário private void createmap() System.out.println( "Entre com uma string:" ); // prompt para entrada do String input = scanner.nextline(); // cria um objeto StringTokenizer para a entrada StringTokenizer tokenizer = new StringTokenizer( input ); // processando o texto de entrada while ( tokenizer.hasmoretokens() ) // enquanto tiver mais entrada String word = tokenizer.nexttoken().tolowercase(); // captura palavra // se o mapa contiver a palavra if ( map.containskey( word ) ) // a palavra está no mapa? int count = map.get( word ); // obtém contagem atual map.put( word, count + 1 ); // incrementa a contagem } // fim if else map.put( word, 1 ); // adiciona a nova palavra com contagem 1 ao mapa } // end while } // end method createmap 43

Invoca o método nextline da classe Scanner para ler a entrada do usuário private void createmap() System.out.println( "Entre com uma frase:" ); // prompt para entrada do usuário String input = scanner.nextline(); // cria um objeto StringTokenizer para a entrada StringTokenizer tokenizer = new StringTokenizer( input ); // processando o texto de entrada while ( tokenizer.hasmoretokens() ) // enquanto tiver mais entrada String word = tokenizer.nexttoken().tolowercase(); // captura palavra // se o mapa contiver a palavra if ( map.containskey( word ) ) // a palavra está no mapa? int count = map.get( word ); // obtém contagem atual map.put( word, count + 1 ); // incrementa a contagem } // fim if else map.put( word, 1 ); // adiciona a nova palavra com contagem 1 ao mapa } // end while } // end method createmap 44

Cria um objeto StringTokenizer para dividir a private void createmap() System.out.println( "Entre com uma frase:" ); // prompt para entrada do usuário String input = scanner.nextline(); string de entrada em suas palavras componentes individuais // cria um objeto StringTokenizer para a entrada StringTokenizer tokenizer = new StringTokenizer( input ); // processando o texto de entrada while ( tokenizer.hasmoretokens() ) // enquanto tiver mais entrada String word = tokenizer.nexttoken().tolowercase(); // captura palavra // se o mapa contiver a palavra if ( map.containskey( word ) ) // a palavra está no mapa? int count = map.get( word ); // obtém contagem atual map.put( word, count + 1 ); // incrementa a contagem } // fim if else map.put( word, 1 ); // adiciona a nova palavra com contagem 1 ao mapa } // end while } // end method createmap 45

private void createmap() System.out.println( "Entre com uma frase:" ); // prompt para entrada do usuário String input = scanner.nextline(); Utiliza o método hasmoretokens para determinar se há mais tokens na string sendo separada em tokens // cria um objeto StringTokenizer para a entrada StringTokenizer tokenizer = new StringTokenizer( input ); // processando o texto de entrada while ( tokenizer.hasmoretokens() ) // enquanto tiver mais entrada String word = tokenizer.nexttoken().tolowercase(); // captura palavra // se o mapa contiver a palavra if ( map.containskey( word ) ) // a palavra está no mapa? int count = map.get( word ); // obtém contagem atual map.put( word, count + 1 ); // incrementa a contagem } // fim if else map.put( word, 1 ); // adiciona a nova palavra com contagem 1 ao mapa } // end while } // end method createmap 46

private void createmap() System.out.println( "Entre com uma frase:" ); // prompt para entrada do usuário String input = scanner.nextline(); Se houver mais tokens, o próximo é convertido em letras minúsculas // cria um objeto StringTokenizer para a entrada StringTokenizer tokenizer = new StringTokenizer( input ); // processando o texto de entrada while ( tokenizer.hasmoretokens() ) // enquanto tiver mais entrada String word = tokenizer.nexttoken().tolowercase(); // captura palavra // se o mapa contiver a palavra if ( map.containskey( word ) ) // a palavra está no mapa? int count = map.get( word ); // obtém contagem atual map.put( word, count + 1 ); // incrementa a contagem } // fim if else map.put( word, 1 ); // adiciona a nova palavra com contagem 1 ao mapa } // end while } // end method createmap 47

private void createmap() System.out.println( "Entre com uma frase:" ); // prompt para entrada do usuário String input = scanner.nextline(); O próximo token é obtido com uma chamada ao método nexttoken da classe StringTokenizer, // cria um objeto StringTokenizer para a entrada StringTokenizer tokenizer = new StringTokenizer( input ); que retorna uma string // processando o texto de entrada while ( tokenizer.hasmoretokens() ) // enquanto tiver mais entrada String word = tokenizer.nexttoken().tolowercase(); // captura palavra // se o mapa contiver a palavra if ( map.containskey( word ) ) // a palavra está no mapa? int count = map.get( word ); // obtém contagem atual map.put( word, count + 1 ); // incrementa a contagem } // fim if else map.put( word, 1 ); // adiciona a nova palavra com contagem 1 ao mapa } // end while } // end method createmap 48

private void createmap() System.out.println( "Entre com uma frase:" ); // prompt para entrada do usuário String input = scanner.nextline(); // cria um objeto StringTokenizer para a entrada StringTokenizer tokenizer = new StringTokenizer( input ); Chama o método containskey da classe Map // processando o texto de entrada while ( tokenizer.hasmoretokens() ) // enquanto tiver mais entrada String word = tokenizer.nexttoken().tolowercase(); // captura palavra para determinar se a palavra já está no mapa // se o mapa contiver a palavra if ( map.containskey( word ) ) // a palavra está no mapa? int count = map.get( word ); // obtém contagem atual map.put( word, count + 1 ); // incrementa a contagem } // fim if else map.put( word, 1 ); // adiciona a nova palavra com contagem 1 ao mapa } // end while } // end method createmap 49

private void createmap() System.out.println( "Entre com uma frase:" ); // prompt para entrada do usuário String input = scanner.nextline(); // cria um objeto StringTokenizer para a entrada StringTokenizer tokenizer = new StringTokenizer( input ); Se a palavra estiver no mapa, utiliza o método get da classe Map para obter o valor associado // processando o texto de entrada while ( tokenizer.hasmoretokens() ) // enquanto tiver mais entrada String word = tokenizer.nexttoken().tolowercase(); // captura palavra (a contagem) da chave no mapa // se o mapa contiver a palavra if ( map.containskey( word ) ) // a palavra está no mapa? int count = map.get( word ); // obtém contagem atual map.put( word, count + 1 ); // incrementa a contagem } // fim if else map.put( word, 1 ); // adiciona a nova palavra com contagem 1 ao mapa } // end while } // end method createmap 50

private void createmap() System.out.println( "Entre com uma frase:" ); // prompt para entrada do usuário String input = scanner.nextline(); // cria um objeto StringTokenizer para a entrada StringTokenizer tokenizer = new StringTokenizer( input ); // processando o texto de entrada while ( tokenizer.hasmoretokens() ) // enquanto tiver mais entrada String word = tokenizer.nexttoken().tolowercase(); // captura palavra Incrementa esse valor e utiliza o método put da classe Map para substituir o valor associado à chave no mapa // se o mapa contiver a palavra if ( map.containskey( word ) ) // a palavra está no mapa? int count = map.get( word ); // obtém contagem atual map.put( word, count + 1 ); // incrementa a contagem } // fim if else map.put( word, 1 ); // adiciona a nova palavra com contagem 1 ao mapa } // end while } // end method createmap 51

1. import java.util.stringtokenizer; 2. import java.util.map; 3. import java.util.hashmap; 4. import java.util.set; 5. import java.util.treeset; 6. import java.util.scanner; 1. public class WordTypeCount 2. private Map< String, Integer > map; 3. private Scanner scanner; 4. public WordTypeCount() 5. map = new HashMap< String, Integer >(); // cria HashMap 6. scanner = new Scanner( System.in ); // cria scanner 7. createmap(); // cria mapa baseado na entrada do usuário 8. displaymap(); // apresenta conteúdo do mapa 9. }//fim do construtor de WordTypeCount Chama o método displaymap para exibir todas as entradas do mapa 52

Método displaymap: exibe todas as entradas armazenadas em um mapa private void displaymap() Set< String > keys = map.keyset(); // obtém as chaves // ordena as chaves TreeSet< String > sortedkeys = new TreeSet< String >( keys ); System.out.println( O mapa contém:\nkey\t\tvalue" ); // gera a saída para cada chave no mapa for ( String key : sortedkeys ) System.out.printf( "%s\t\t%s \n", key, map.get( key ) ); } // end method displaymap 53

Utiliza o método keyset da classe HashMap para obter um conjunto das chaves private void displaymap() Set< String > keys = map.keyset(); // obtém as chaves // ordena as chaves TreeSet< String > sortedkeys = new TreeSet< String >( keys ); System.out.println( O mapa contém:\nkey\t\tvalue" ); // gera a saída para cada chave no mapa for ( String key : sortedkeys ) System.out.printf( "%s\t\t%s \n", key, map.get( key ) ); } // end method displaymap 54

Cria um objeto TreeSet com as chaves, private void displaymap() em que as chaves são ordenadas Set< String > keys = map.keyset(); // obtém as chaves // ordena as chaves TreeSet< String > sortedkeys = new TreeSet< String >( keys ); System.out.println( O mapa contém:\nkey\t\tvalue" ); // gera a saída para cada chave no mapa for ( String key : sortedkeys ) System.out.printf("%s\t\t%s \n", key, map.get( key ) ); } // end method displaymap 55

private void displaymap() Set< String > keys = map.keyset(); // obtém as chaves // ordena as chaves TreeSet< String > sortedkeys = new TreeSet< String >( keys ); Imprime cada chave e seu valor no mapa System.out.println( O mapa contém:\nkey\t\tvalue" ); // gera a saída para cada chave no mapa for ( String key : sortedkeys ) System.out.printf("%s\t\t%s \n", key, map.get( key ) ); } // end method displaymap 56

Saída: Entre com uma frase: To be or not to be: that is the question O mapa contém: Key Value be 1 be: 1 is 1 not 1 or 1 question 1 that 1 the 1 to 2 57

http://www.usp.br/thienne/coo/material/exercicios-livrop1.zip