Como escrever no terminal os elementos de uma Hastable?

2 respostas
P

Olá amigos,
tenho uma Hastable com elementos do tipo de uma classe “aluno”

Hashtable<Numero,Aluno> cursos = new Hashtable<Numero,Aluno>();

Como posso percorrer toda a Hastbale para escrever os valores dos seus elementos ?

Valeu.
Paulito

2 Respostas

peron

Usa Enumeration:

for (Enumeration e = seuhash.keys() ; e.hasMoreElements() ;) {
         String k = (String)e.nextElement();
         String v = seuhash.get(k);
         System.out.println(k + ": " + v);
     }
T

Um exemplo completo. (Note que eu prefiro usar HashMap, não Hashtable. Use Hashtable apenas para manter compatibilidade com algumas APIs antigas, não em programas novos.

import java.util.*;

class Numero {
    private int n;
    public Numero (int pN) { n = pN; }
    public String toString() { return Integer.toString (n); }
    public int intValue() { return n; }
}
class Aluno {
    private String nome;
    public Aluno (String pNome) { nome = pNome; }
    public String toString() { return "[" + nome + "]"; }
    public String getNome() { return nome; }
}

class TesteImpressaoHashTable {
    public static void main(String[] args) {
        // Use HashMap, e tente sempre usar a interface, não a classe concreta; 
        // evite usar Hashtable a menos que precise de algum recurso específico
        // dessa classe.
        Map &lt;Numero, Aluno&gt; cursos = new HashMap &lt;Numero, Aluno&gt; ();
        //-- Preenchendo os valores
        cursos.put (new Numero (0xCAFEBABE), new Aluno ("James Gosling"));
        cursos.put (new Numero (666), new Aluno ("Bill Gates"));
        cursos.put (new Numero (1234), new Aluno ("Jose Aparecido"));
        
        //-- Primeira forma (habitualmente mais rápida)
        System.out.println ("--- 1a. forma ---");
        for (Map.Entry &lt;Numero, Aluno&gt; curso : cursos.entrySet()) {
            System.out.printf ("Numero %d : %s%n", curso.getKey().intValue(), curso.getValue().toString());
        }
        //-- Forma automática (normalmente não a desejada)
        System.out.println ("--- 2a. forma ---");
        System.out.println (cursos);
        //-- Terceira forma (a mais comum, mas costuma ser mais lenta)
        System.out.println ("--- 3a. forma ---");
        for (Numero numero : cursos.keySet()) {
            System.out.printf ("Numero %d : %s%n", numero.intValue(), cursos.get(numero).toString());
        }
        
        //-- Se você precisa conservar a ordem em que os dados foram inseridos, use LinkedHashMap.
        //-- Repetindo o exemplo anterior com LinkedHashMap
        cursos = new HashMap &lt;Numero, Aluno&gt; ();
        //-- Preenchendo os valores
        cursos.put (new Numero (0xCAFEBABE), new Aluno ("James Gosling"));
        cursos.put (new Numero (666), new Aluno ("Bill Gates"));
        cursos.put (new Numero (1234), new Aluno ("Jose Aparecido"));
        System.out.println ("--- Usando LinkedHashMap ---");
        for (Map.Entry &lt;Numero, Aluno&gt; curso : cursos.entrySet()) {
            System.out.printf ("Numero %d : %s%n", curso.getKey().intValue(), curso.getValue().toString());
        }
    }
}
Criado 16 de maio de 2006
Ultima resposta 16 de mai. de 2006
Respostas 2
Participantes 3