Percorrer HashTable [Resolvido]

5 respostas
L

Oi,
estou aqui tentando percorrer o conteudo do meu hashtable, criado dessa maneira:

io_ht_tabel_lexica.put("program", "1");
io_ht_tabel_lexica.put("label", "2");
io_ht_tabel_lexica.put("const", "3");
io_ht_tabel_lexica.put("var", "4");

Não sei o que esta acontecendo que na hora que estou percorrendo o hash ele muda a ordem.. pegando primeiro o const depois program.. etc..

estou fazendo assim:

StringBuffer ls_buf = new StringBuffer();			
			
for(Enumeration n = io_ht_tabel_lexica.keys(); n.hasMoreElements(); ){
		
	ls_buf.append(n.nextElement()).append('\n');
				
				JOptionPane.showMessageDialog(null,ls_buf);
			}
o que esta errado?

Tchauzin!

5 Respostas

D

Olá,

Não tem nada errado…

Hashtable não mantém a ordem de seus elementos… ou seja, sempre vai mudar, não há como garantir o que sai primeiro e o que sai por ultimo!

se você quiser que eles mantenham algum tipo de ordem, você pode usar TreeMap, ou LinkedHashMap

R

Ou vc pode usar um SortedMap que mantem a ordem ASC das chaves , essa ordenação das chaves é uma ordenação natural

P

a TreeMap, como o deh sugeriu ai em cima

V

Aliás, eu daria outras razões para você a interface Map associada a um HashMap ou um TreeMap e não uma HashTable:

  1. Não é sincronizado. Dificilmente você vai precisar da sincronização e, quando precisar, dificilmente será na sua lista. Além disso, se sua lista realmente precisar ser sincronizada, você pode recorrer a um wrapper - Collections.synchronizedMap(seuMapa) - e deixar a parte sincronizada só nos métodos onde ela for realmente necessária. Além disso, fica também fácil alterar o código para usar uma classe realmente avançada no futuro, com as do pacote java.util.concurrent;

  2. Você pode obter as chaves, os valores ou as entradas pelos convenientes métodos keySet(), values() e entrySet(). O Set retornado é parte da collections (e não um Enumeration esquisito) e pode ser usado num for each ou copiado para qualquer outra coleção;

Por exemplo, para pegar as chaves por um índice vc poderia fazer:

  1. Não possuem métodos com significado duplicado (add e addElement, por exemplo), melhorando a legibilidade geral do código;

  2. É recomendado pela Sun.

O mesmo vale para a interface List associada a um ArrayList ou um LinkedList, ao invés do Vector.

L

affffff já odiei o hash!!! auiaeiaeuaeaeuiaeuaeui
Bom muito obrigado a todos!!

Acabei optanto por fazer varios if’s… hehehehehe, porque se eu foc substituir meu HashTable, eu iria ter que mudar o programa inteiro… ^^
pois estou aqui, voltando para os tempos de faculdade… e insinando meu irmão a fazer um analisador léxico e sintatico…

Resolvi assim:

if (io_hash_table.containsKey(palavraquequero)) { // Código }

=P

Tchauzin!

Criado 22 de abril de 2007
Ultima resposta 23 de abr. de 2007
Respostas 5
Participantes 5