迭代HashSet并在每次迭代中删除多个元素

时间:2018-04-20 15:12:50

标签: java iterator hashset

在以下代码中,我尝试将Set circular primes提升到maxPlusOne

Set<Integer> primes = getPrimes(maxPlusOne); //Returns a set of all primes up to maxPlusOne ont including it
    Set<Integer> circularPrimes = new HashSet<>();

    Iterator<Integer> it = primes.iterator();
    while(it.hasNext()) {
        Set<Integer> perms = getAllRotations(it.next()); //Returns all rotations of an integer 123 => {123, 231, 312}

        if(primes.containsAll(perms)) {
            circularPrimes.addAll(perms);
            // Here I want to do something to the effect of removing all elements in perms from primes
        }
    }

现在在if语句中,我想从perms中删除primes中的所有元素。 This答案显示了如何删除iterator指向的一个元素。甚至可以在一次迭代中从circularPrimes中删除多个元素吗?如果是,请帮助。

1 个答案:

答案 0 :(得分:1)

Iterator允许您仅删除当前元素。对于您的情况,您不需要删除任何东西。我相信您要删除的原因是为了避免调用circularPrimes作为先前遇到的数字的循环素数的数字。在这种情况下,您只需检查该号码是否已经成为circularPrimes集的一部分 - 如果是,则不要致电getAllRotations

while(it.hasNext()) {
    Integer currentNum = it.next();
    if (!circularPrimes.contains(currentNum)) {
        Set<Integer> perms = getAllRotations(currentNum); 

        if(primes.containsAll(perms)) {
            circularPrimes.addAll(perms); 
        }
    }

}