簡體   English   中英

Java中的HashSet

[英]HashSet in java

我學習編程Java,並且對java.util.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()中運行此代碼,則不會增加。 我需要建議

那是因為您每次都在哈希集中添加相同的學生。 而且HashSet不允許重復值。

嘗試這種方式。

//班級學生

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());
       }
    }
}

如果使用此塊:

{
     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);
}

即使變量是相同的(學生)創建新的一個新實例

在您的代碼中, Student student是對一個對象(永遠)的引用。 由於您不會在每次將一個對象添加到students集中時都分配新的Student ,因此,您要多次將同一對象添加到該Set

請注意,我使用了“相同對象”和“設置”這兩個詞。 Set最多允許一個對象的實例。

您的代碼假裝要添加多個學生,但實際上只添加了一個學生。

解決方法如下:

 // really add a student to the set.
 System.out.print("Name : ");
 String name = scan.nextLine();
 student = new Student();// note this line.
 student.setName(name);
 students.add(student);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM