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

HashSet无法填充数组元素,输出无内容问题求助

问题排查与修复方案

我帮你梳理下代码里的几个关键问题,这就是你看不到输出、元素没加入HashSet的核心原因:

1. 循环条件完全错误,导致数组元素根本没被添加

你写的循环条件是for ( int i = 0; i < set.size(); i ++),但刚开始创建的HashSet是空的,size()返回0,这个循环直接就跳过了——所以System.out.println("Test")不会执行,数组里的元素也一个都没加到set里。

正确的做法应该是遍历你的book数组,而不是空set的大小:

for ( int i = 0; i < book.length; i ++){ 
    System.out.println("Test"); 
    set.add(book[i]); 
}

2. 迭代器创建时机错误,无法遍历后续添加的元素

你在HashSet刚创建(空状态)就获取了迭代器Iterator iter = set.iterator();,之后往set里加元素,这个迭代器不会同步更新,所以后面的while(iter.hasNext())循环根本不会进入。

要么在添加完所有元素之后再创建迭代器,要么直接用增强for循环遍历set(更简洁):

// 方案一:添加完元素后再拿迭代器
Iterator iter = set.iterator(); 
while(iter.hasNext()) { 
    System.out.println(iter.next()); // 注意要调用next()拿单个元素,你之前直接打set会重复输出整个集合
}

// 方案二:用增强for更直观
for (Book b : set) {
    System.out.println(b);
}

3. TreeSet的潜在问题:Book类需要实现Comparable接口

TreeSet是有序集合,要求元素必须实现Comparable<Book>接口,否则调用ts.addAll(set)的时候会抛出ClassCastException。你需要给Book类添加排序逻辑,比如根据书名或者id排序:

public class Book implements Comparable<Book> {
    // 你的类属性、构造方法等
    @Override
    public int compareTo(Book o) {
        // 示例:按书名升序排序
        return this.bookName.compareTo(o.bookName);
    }
}

修复后的完整代码片段参考

public void part8(){ 
    HashSet<Book> set = new HashSet<Book>(); 
    // 遍历book数组添加元素
    for ( int i = 0; i < book.length; i ++){ 
        System.out.println("Test"); 
        set.add(book[i]); 
    } 
    // 打印HashSet,用增强for更清晰
    System.out.println("Ausgeben der HashSet"); 
    for (Book b : set) {
        System.out.println(b);
    } 
    // 添加重复元素
    set.add(book[5]); 
    System.out.println("Ausgeben der HashSet nach hinzufügen des Duplikats"); 
    System.out.println(set); 
    // TreeSet部分,确保Book实现了Comparable
    TreeSet<Book> ts = new TreeSet<Book>(); 
    ts.addAll(set); 
    System.out.println("Ausgeben der TreeSet"); 
    System.out.println(ts); 
} 

内容的提问来源于stack exchange,提问作者Birgit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:58:45