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
相关产品推荐
相关产品推荐

