2014-06-04 6 views
0

J'ai obtenu ce résultat étrange quand j'ai essayé de copier les éléments d'une autre liste/ensemble dans un HashSet. Voici le code:HashSet n'est pas vide mais ne peut pas être itéré?

public class Test { 

public static void main(String args[]) { 
    HashSet<String> set1 = new HashSet<String>(); 
    HashSet<String> set2 = new HashSet<String>(); 

    set1.add("A"); 
    set1.add("B"); 
    set1.add("C"); 

    Iterator<String> iter = set1.iterator(); 
    while(iter.hasNext()) { 
     String elem = iter.next(); 
     set2.add(elem);  // copy the elements 
     System.out.println("set1: " + elem + " "); 
    } 

    System.out.println("SIZE = " + set2.size() + "; isEmpty = " + set2.isEmpty() + "; next = " + iter.hasNext()); 

    Iterator<String> iter2 = set2.iterator(); 
    while(iter.hasNext()) { 
     String elem = iter2.next(); 
     System.out.println("set2: " + elem + " "); 
    } 
} 

Résultat:

set1: A 
set1: B 
set1: C 
SIZE = 3; isEmpty = false; next = false 

Comme vous pouvez le voir, set2 est pas vide, mais le iterator retourne rien, tout en appelant suivant(). Je suis si confus. Pourriez-vous expliquer cela?

* Mises à jour:

Merci pour toute aide! C'est une erreur stupide ... *

+4

Typo: La dernière boucle 'while' utilise la vieille variable' iter' au lieu de 'iter2'. – rgettman

+0

Le 'iter' que vous utilisez est à la fin, donc il n'y en a plus. –

Répondre

0

Votre boucle while à la fin essaie de parcourir iter & pas iter2 (itérateur pour set2). il devrait être

while(iter2.hasNext()) 
{ 
    .... 
} 
+0

Oui, je l'ai vu juste après l'affichage, stupide ... Merci beaucoup! – Truely

0

Vous avez une faute de frappe - la deuxième fois que vous utilisez à nouveau iter au lieu de iter2

Questions connexes