在以下代码中,我尝试将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
中删除多个元素吗?如果是,请帮助。
答案 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);
}
}
}