CodeGym /Blogue Java /Random-PT /Como criar um dicionário em Java
John Squirrels
Nível 41
San Francisco

Como criar um dicionário em Java

Publicado no grupo Random-PT
Se você precisar criar um dicionário em um programa Java, a maneira mais lógica de resolver esse problema é usar a estrutura de dados do dicionário. Essa estrutura de dados permite armazenar informações no formato "chave - valor". Java tem uma classe Dictionary especial , bem como seu descendente, Hashtable . Também há a interface Map e a classe HashMap , que também armazena pares “chave-valor”. Portanto, há muitas maneiras de criar um dicionário Java.

Estrutura de dados do dicionário

Assim, a estrutura de dados do Dicionário armazena informações como uma combinação chave-valor. Ou seja, a qualquer valor associamos uma chave (pode ser, por exemplo, id) e inserimos esse par no dicionário. Endereçar um elemento do dicionário, excluir, pesquisar no dicionário é realizado pela tecla. Parece conveniente organizar usando tal estrutura de dados, por exemplo, uma lista telefônica, onde o nome (chave) corresponde ao número de telefone (valor).

Classe do dicionário e sua extensão

Para começar, java.util.Dictionary <K, V> util.Dictionary é uma classe abstrata. Ele representa uma relação chave-valor e funciona de forma semelhante a um mapa. Dada uma chave, você pode armazenar valores e, quando necessário, recuperar o valor usando sua chave. Portanto, é uma lista de pares chave-valor.

public abstract class Dictionary<K,V> extends Object
Como essa classe é abstrata, não trabalharemos diretamente com ela. Dictionary tem uma classe filha direta Hashtable . Portanto, para criar um dicionário em Java, você pode usar Hashtable . Essa classe implementa uma tabela hash, que mapeia chaves para valores e qualquer objeto não nulo pode ser usado como uma chave ou como um valor. Na hierarquia Java, Hashtable estende Dictionary e implementa Map . Vamos dar um exemplo. Vamos criar um dicionário clássico, uma lista telefônica, baseado em Hashtable .

Dictionary phoneBook = new Hashtable();
Se escrevermos dessa maneira, devemos aplicar conversão de tipo para algumas operações. Por exemplo, para uma extração de chave.

System.out.println(((Hashtable) phoneBook).keySet());
Para evitar isso, podemos mudar

Dictionary phoneBook = new Hashtable ();
no

Hashtable phoneBook = new Hashtable ();
Em nosso exemplo, para maior clareza, deixaremos a primeira opção.

import java.util.Dictionary;
import java.util.Hashtable;

public class DictionaryDemo {

       public static void main(String[] args) {

           Dictionary phoneBook = new Hashtable();

           // put() method
           phoneBook.put("Johnny Walker", "2178");
           phoneBook.put("Andrew Arnold", "1298");
           phoneBook.put("Ivy Briggs", "1877");
           phoneBook.put("Ricky McBright", "2001");

           //print out Hashtable out
           System.out.println(phoneBook);

           //let's get the value using the key
           System.out.println(phoneBook.get("Ivy Briggs"));
           //there's no such key in out Hashtable
           System.out.println(phoneBook.get("Sol Frank"));

           //Is there a record with the "Johnny Walker" key?
           System.out.println(((Hashtable) phoneBook).containsKey("Johnny Walker"));
           //all keys of the Hashtable
           System.out.println(((Hashtable) phoneBook).keySet());
           //values from Hashtable
           System.out.println(((Hashtable) phoneBook).values());

           //the quantity of records
           System.out.println(phoneBook.size());
           //removing one record
           phoneBook.remove("Andrew Arnold");
           System.out.println(phoneBook);
       }
   }
A saída é:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null true [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] 4 {Johnny Walker =2178, Ricky McBright=2001, Ivy Briggs=1877}

HashMap como um dicionário

HashMap , ao contrário de Hashtable , não é um descendente direto de Dictionary . No entanto, devido a muitos recursos, na maioria dos casos é melhor criar um dicionário usando o HashMap . A classe HashMap é muito semelhante em funcionalidade a Hashtable . A principal diferença é que os métodos do Hashtable são sincronizados, mas o HashMap não. A sincronização no Hashtable diminui o desempenho do código. Além disso, a classe HashMap , ao contrário de Hashtable, permite o uso de null como uma chave (uma) e um conjunto de null como valores. No nosso caso, o programa terá exatamente a mesma aparência do exemplo acima. A única diferença está no tipo de coleção. No entanto, na maioria dos casos, essa é a maneira preferida de trabalhar com dicionários em Java.

import java.util.HashMap;
import java.util.Map;

public class DictionaryDemo2 {

   public static void main(String[] args) {

       Map<String, String> phoneBook = new HashMap<String,String>();
      
       phoneBook.put("Johnny Walker", "2178");
       phoneBook.put("Andrew Arnold", "1298");
       phoneBook.put("Ivy Briggs", "1877");
       phoneBook.put("Ricky McBright", "2001");
      
       System.out.println(phoneBook);
      
       System.out.println(phoneBook.get("Johnny Walker"));
       System.out.println(phoneBook.get("Ivy Briggs"));
       System.out.println(phoneBook.get("Unknown Friend"));
      
       System.out.println(phoneBook.containsKey("Johnny Walker"));
       System.out.println(phoneBook.containsKey("Unknown Friend"));

       System.out.println(phoneBook.keySet());
       System.out.println(phoneBook.values());

       System.out.println(phoneBook.size());

       phoneBook.remove("Andrew Arnold");

       System.out.println(phoneBook);
   }

}
Aqui está a saída:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 nulo verdadeiro falso [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION