代码之家  ›  专栏  ›  技术社区  ›  bisarch

迭代哈希集并在每次迭代中删除多个元素

  •  0
  • bisarch  · 技术社区  · 6 年前

    在下面的代码中,我试图获取 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 回复  |  直到 6 年前
        1
  •  1
  •   Thiyagu    6 年前

    迭代器只允许删除当前元素。对于您的情况,您不需要删除任何内容。我相信你想删除的原因是为了避免打电话 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); 
            }
        }
    
    }