[RESOLVIDO] - Hashtable

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);
	}

}

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

rss…

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

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

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

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());
         }  
     }  

[quote=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());
         }  
     }  

[/quote]

Obrigado…

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