You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为List<HashSet<Integer>>集合创建Iterator?

解决Java中List<HashSet<Integer>>迭代器创建错误的问题

我来帮你梳理下问题所在,以及怎么修正:

首先看你最初尝试的代码:

Iterator Iterator<HashSet<Integer>> iterator = new list.iterator()

这里有两个致命的语法错误:

  • 重复的类型声明:你把Iterator写了两次,正确的泛型迭代器声明应该是Iterator<HashSet<Integer>>,不需要前面再额外加Iterator
  • 多余的new关键字:list.iterator()方法本身就会返回一个已经实例化好的迭代器对象,不需要用new来创建

再看你代码片段里的Iterator<HashSet<Integer>> iter = basketList.iterator();,其实这行语法本身是正确的,报错大概率是你之前写代码时犯了上面的错误,或者是在逻辑上的问题(比如你在settingBasket方法里先获取了迭代器,再往列表里加元素,这时候之前的迭代器会因为列表结构改变而失效)。

下面是修正后的完整代码,我还添加了迭代器的正确使用示例:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Test {
    private static List<HashSet<Integer>> basketList = new ArrayList<>();
    private static Map<Integer, Integer> map = new HashMap<>();

    public static void settingBasket(String fname) throws FileNotFoundException {
        Scanner scan = new Scanner(new File(fname));
        int n = Integer.parseInt(scan.next());

        for (int i = 0; i < n; i++) {
            scan.next();
            int m = Integer.parseInt(scan.next());
            HashSet<Integer> elems = new HashSet<>();
            for (int j = 0; j < m; j++) {
                elems.add(Integer.parseInt(scan.next()));
            }
            basketList.add(elems);
        }

        // 正确获取迭代器:此时列表已经有元素了
        Iterator<HashSet<Integer>> iter = basketList.iterator();
        while (iter.hasNext()) {
            HashSet<Integer> currentBasket = iter.next();
            // 在这里处理每个HashSet的逻辑,比如打印元素
            System.out.println(currentBasket);
        }
    }

    public static void settingPair() {
        // 如果你只是需要遍历列表,用增强for循环更简洁(底层也是迭代器实现)
        for (HashSet<Integer> basket : basketList) {
            // 处理逻辑
        }

        // 当然也可以手动用迭代器
        Iterator<HashSet<Integer>> iter = basketList.iterator();
        while (iter.hasNext()) {
            HashSet<Integer> basket = iter.next();
            // 处理逻辑
        }
    }
}

额外提醒几个注意点:

  • 不要在获取迭代器之后,再对列表进行add/remove操作(除非用迭代器自己的remove()方法),否则会抛出ConcurrentModificationException
  • 增强for循环是迭代器的语法糖,代码更简洁,适合大多数遍历场景,如果不需要手动控制迭代器的移动,优先用它

内容的提问来源于stack exchange,提问作者김규덕

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:28:51