java中的HashSet

时间:2018-05-01 14:10:55

标签: java

我学习编程java,我有java.util.HashSet的问题 我的问题,如何在我的代码

中显示hashset中的size()
// class Student

package name;
public class Student
{
   private String name;
   public String getName()
   {
      return this.name;
   }
   public void setName(String name)
   {
     this.name = name;
   }
}
// Entry Point
package client;
import name.Student;
import java.util.Set;
import java.util.HashSet;
import java.util.Scanner;
public class Client1
{
    public static void main (String[] args)
    {
       Scanner scan = new Scanner(System.in);
       Set<Student> students = new HashSet<Student>();
       Student student = new Student();

       int totalStudent = 0;
       System.out.print("TypeTotal Student : ");
       totalStudent = Integer.parseInt(scan.nextLine());

       for(int i = 0; i < totalStudent ; i++)
       {
           System.out.print("Name : ");
           String name = scan.nextLine();
           student.setName(name);
           students.add(student);
       }
       System.out.println("Element Total In Set :" students.size());
       for(Student std: students)
       {
           System.out.println(std.getName());
       }
    }
}

如果我在终端student.size()中运行此代码不会增加。 我需要建议

3 个答案:

答案 0 :(得分:2)

那是因为你每次都在hashset中添加同一个学生。并且HashSet不允许重复值。

试试这种方式。

// class Student

package name;
public class Student
{
   private String name;
   public String getName()
   {
      return this.name;
   }
   public void setName(String name)
   {
     this.name = name;
   }
}
// Entry Point
package client;
import name.Student;
import java.util.Set;
import java.util.HashSet;
import java.util.Scanner;
public class Client1
{
    public static void main (String[] args)
    {
       Scanner scan = new Scanner(System.in);
       Set<Student> students = null;
       students = new HashSet<Student>();
       Student student;

       int totalStudent = 0;
       System.out.print("TypeTotal Student : ");
       totalStudent = Integer.parseInt(scan.nextLine());

       for(int i = 0; i < totalStudent ; i++)
       {
           System.out.print("Name : ");
           String name = scan.nextLine();
           student = new Student();
           student.setName(name);
           students.add(student);
       }
       System.out.println("Element Total In Set :" students.size());
       for(Student std: students)
       {
           System.out.println(std.getName());
       }
    }
}

答案 1 :(得分:1)

如果您使用此块:

{
     System.out.print("Name : ");
     String name = scan.nextLine();
     student.setName(name);
     students.add(student);
}

您使用的是始终相同的对象,而Hashset不允许重复(即使您更改了对象的一个​​属性)。

使用此块可以正常工作,因为您每次交互都会创建一个新对象:

{
    System.out.print("Name : ");
    String name = scan.nextLine();
    student = new Student();
    student.setName(name);
    students.add(student);
}

即使变量相同(学生),您也可以使用 new

创建新实例

答案 2 :(得分:1)

在你的代码中, <div class="box"> <div> <iframe src="webgl_sphereWithEquator.html" frameborder="0" scrolling="no" width="100%" height="512" align="left"> </iframe> </div> <div> <iframe src="webgl_hopftorus1.html" frameborder="0" scrolling="no" width="100%" height="512" align="right"> </iframe> </div> </div> <div class="box"> <div> <iframe src="webgl_sphereWithSlopedEquator.html" frameborder="0" scrolling="no" width="100%" height="512" align="left"> </iframe> </div> <div> <iframe src="webgl_hopftorus2.html" frameborder="0" scrolling="no" width="100%" height="512" align="right"> </iframe> </div> </div> 是对一个对象(永远)的引用。 既然你没有分配新的 每次向Student student集添加对象时Student, 你是, 代替, 将同一个对象多次添加到students

请注意,我使用了“same object”和“Set”。 Set只允许一个对象实例。

您的代码假装要添加多个学生, 但实际上只是增加了一名学生。

解决方案如下:

Set