HashSet不会填充元素

时间:2018-01-22 11:50:59

标签: java arrays

我声明了一个HashSet,并希望用一个也声明的数组填充它。但是当我想用数组的元素填充它时,它会起作用。我已经尝试输出文本所在的输出。问题是,即使文本也没有出现在输出中。我找不到自己的错误。 这是麻烦的程序的一部分

public void part8(){
        HashSet<Book> set = new HashSet<Book>();
        Iterator iter = set.iterator();

        //put array into hashset
        for ( int i = 0; i < set.size(); i ++){
            System.out.println("Test");
            set.add(book[i]);
        }

        //print hashset
        System.out.println("Ausgeben der HashSet");
        while(iter.hasNext()) {
            System.out.println(set);
        }

        //add a duplicate, which shouldn't be shown in the output
        set.add(book[5]);

        //try to show the hashset after adding duplicate
        System.out.println("Ausgeben der HashSet nach hinzufügen des Duplikats");
        System.out.println(set);

        //TreeSet
        TreeSet<Book> ts = new TreeSet<Book>();

        //hmake treeset from hashset
        ts.addAll(set);

        //print treeset
        System.out.println("Ausgeben der TreeSet");
        System.out.println(ts);
    }

谢谢你们的帮助。

4 个答案:

答案 0 :(得分:2)

至于这段代码,有一些问题:

//put array into hashset
for ( int i = 0; i < set.size(); i ++){
    System.out.println("Test");
    set.add(book[i]);
}

此循环永远不会执行,因为集size为0.您应该将set.size()更改为book.length

//print hashset
System.out.println("Ausgeben der HashSet");
while(iter.hasNext()) {
    System.out.println(set);
}

我想在此处打印set内容。相反,您应该通过以下方式替换循环内容:

Book book = iter.next();
System.out.println(book.toString()); //Print whatever you want

编辑:正如@Lucas Oliveira所说,您还可以通过以下方式插入数组中的每个成员:set.addAll(Arrays.asList(book));

答案 1 :(得分:1)

只需更改此部分:

    //put array into hashset
    for ( int i = 0; i < set.size(); i ++){
        System.out.println("Test");
        set.add(book[i]);
    }

set.addAll(Arrays.asList(book));

并且数组中的所有元素都将相关地添加...

... PS

您还应该更改此部分:

    //print hashset
    System.out.println("Ausgeben der HashSet");
    while(iter.hasNext()) {
        System.out.println(set);
    }

类似

for(final Book book: set){
    System.out.println(book);
}

为了打印出集合中包含的每本书....

答案 2 :(得分:0)

问题在于以下代码:

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

因为您已在行HashSet<>中创建了新的HashSet<Book> set = new HashSet<Book>();。由于它刚刚创建且尚未插入element,因此调用set.size()将返回0,因此for-loop的正文将不再迭代

更正后的代码如下:

    //put array into hashset
    for ( int i = 0; i < set.size(); i ++){
        System.out.println("Test");
        set.add(book[i]);
    }

答案 3 :(得分:0)

你用空集迭代!

替换:

    //put array into hashset
    for ( int i = 0; i < set.size(); i ++){
        System.out.println("Test");
        set.add(book[i]);
    }

with:

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

或:

    //put array into hashset
    set.addAll(Arrays.asList(book));