3-9编程
package com.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class StudentTest {
public static void main(String[] args) {
// 定义三个Student类的对象及一个HashSet类的对象
Student st1 = new Student(1, "Tom", 87);
Student st2 = new Student(2, "Lucy", 95);
Student st3 = new Student(3, "William", 65);
Set set = new HashSet();
// 将Student类的对象添加到集合中
set.add(st1);
set.add(st2);
set.add(st3);
// 使用迭代器显示Student类的对象中的内容
Iterator it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
// 添加一个重复数据到set中
Student st11 = new Student(2, "Lucy", 95);
set.add(st11);
it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
}package com.set;
public class Student {
// 根据需求完成Student类的定义
private int stuId;
private String name;
private float score;
public Student() {
}
public Student(int stuId, String name, float score) {
super();
this.stuId = stuId;
this.name = name;
this.score = score;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
@Override
public String toString() {
return "[学号:" + stuId + ", 姓名:" + name + ", 成绩:"
+ score + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + Float.floatToIntBits(score);
result = prime * result + stuId;
return result;
}
@Override
public boolean equals(Object obj) {
if (this==obj)
return true;
if (obj.getClass()==Student.class) {
Student student = (Student) obj;
return (student.getStuId()==stuId)&&(student.getName().equals(name)&&(student.getScore()==score));
}
return false;
}
}为什么重复数据不管写什么都出来一个Tom
34
收起
正在回答
1回答

程序中交叉循环太多,边输出边添加,也有数据输出的与实际不符。注意以上图中的红框处要注释掉。你是想问Lucy添加了多次为什么只会输出一次吧,那是因为你重写了equals。这两个对像是相等的,所以在Set中只会存在一个
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星