Не удается напечатать элемент hashset с помощью Iterator во второй раз? - PullRequest
1 голос
/ 04 марта 2020

Мне нужно напечатать элементы набора ha sh после удаления одного элемента. использование итератора и выдача sysout не работает, а выдача sysout с помощью hashset obj выводит его только с удаленным элементом. Почему? Если мы можем печатать объекты, используя sysout, почему итератор?

Ниже приведен мой код:

package collectionprg;

import java.util.HashSet;
import java.util.Iterator;

public class RemoveElementHashSet {

    public static void main(String[] args) {


        HashSet<Integer> hs= new HashSet<Integer>();

        hs.add(12);
        hs.add(234);
        hs.add(123);
        hs.add(12);


        Iterator<Integer> it = hs.iterator();

        while(it.hasNext())
        {
            System.out.println(it.next());
        }


    System.out.println("afterremoval"); 

    hs.remove(234);

    while(it.hasNext())
    {
        System.out.println(it.next());
    }   

    System.out.println(hs);

    }

}

1 Ответ

1 голос
/ 04 марта 2020

После завершения sh итерации по элементу HashSet с использованием Iterator, hasNext() всегда вернет false.

Если вы выполните sh, чтобы выполнить секунду итерации, вы должны создать вторую Iterator, снова вызвав it = hs.iterator();.

// first iteration
Iterator<Integer> it = hs.iterator();
while(it.hasNext()) {
    System.out.println(it.next());
}

System.out.println("afterremoval"); 
hs.remove(234);

// second iteration
it = hs.iterator();
while(it.hasNext()) {
    System.out.println(it.next());
} 
...