[RESOLVIDO] - Hashtable

7 respostas
ECO2004

Olá!

A impressão do meu código está aparecendo

2 : A

Por que isso está acontecendo? Esperava

1 : A 2 : B

package com.wilson.map;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;

public class ClasseHashTable 
{
	public static void execute(Map<Integer, String> map)
	{
		Iterator<Integer> it = map.keySet().iterator();
		
		while(it.hasNext())
		{
			System.out.println(it.next()+" : "+map.get(it.next()));
		}
	}
	
	public static void main(String []args)
	{
		Map<Integer, String> map = new Hashtable<Integer, String>();
		
		map.put(1, "A");
		map.put(2, "B");
		
		execute(map);
	}

}

7 Respostas

soaresinfo

Você está chamando it.next() duas vezes no código.

nel

rss…

ECO2004

Sim, uma para imprimir a chave e outra para imprimir o valor cuja chave eu referencio.

mauricioadl

quando vc usa o next e passa para o proximo laço fazendo com que ele pule para o segundo e acaba finalizando.

ECO2004

Como é que fica o laço, então?

E

Mania de não usar variáveis temporárias. Seu problema deve ser resolvido como:

public static void execute(Map<Integer, String> map)  
     {  
         Iterator<Integer> it = map.keySet().iterator();  
           
         while(it.hasNext())  
         {  
             Integer current = it.next();
             System.out.println(current +" : "+map.get(current));  
         }  
     }

Ou melhor, que é o jeito mais eficiente de tratar isso:

public static void execute(Map<Integer, String> map)  
     {  
         for (Map.Entry <Integer, String> entry : map.entrySet()) 
         {
             System.out.println(entry.getKey() + ":" + entry.getValue());
         }  
     }
ECO2004

entanglement:
Mania de não usar variáveis temporárias. Seu problema deve ser resolvido como:

public static void execute(Map<Integer, String> map)  
     {  
         Iterator<Integer> it = map.keySet().iterator();  
           
         while(it.hasNext())  
         {  
             Integer current = it.next();
             System.out.println(current +" : "+map.get(current));  
         }  
     }

Ou melhor, que é o jeito mais eficiente de tratar isso:

public static void execute(Map<Integer, String> map)  
     {  
         for (Map.Entry <Integer, String> entry : map.entrySet()) 
         {
             System.out.println(entry.getKey() + ":" + entry.getValue());
         }  
     }

Obrigado…

Não entendo…o Map.Entry no meu código não estava sendo reconhecido!

Criado 8 de setembro de 2011
Ultima resposta 8 de set. de 2011
Respostas 7
Participantes 5