我学习编程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()中运行此代码不会增加。 我需要建议
答案 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