一 HashSet
package com.set;
public class Cat {
private String name;//名字
private int month;//年龄
private String species;//品种
//构造方法
public Cat(String name, int month, String species) {
super();
this.name = name;
this.month = month;
this.species = species;
}
//getter与setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
@Override
public String toString() {
return "[姓名:" + name + ", 年龄:" + month + ", 品种:" + species + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + month;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((species == null) ? 0 : species.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
//判断对象是否相等,相等则返回true,不用继续比较属性了
if(this==obj)
return true;
//判断obj是否是Cat类的对象
if(obj.getClass()==Cat.class) {
Cat cat=(Cat)obj;
return cat.getName().equals(name)&&(cat.getMonth()==month)&&(cat.getSpecies().equals(species));
}
return false;
}
}
//HashSet测试
package com.set;
import java.util.*;
public class CatTest {
public static void main(String[] args) {
// 定义宠物猫对象
Cat huahua=new Cat("花花",12,"英国短毛猫");
Cat fanfan=new Cat("凡凡",3,"中华田园猫");
//将宠物猫对象放入HashSet中
Set set=new HashSet();
set.add(huahua);
set.add(fanfan);
//显示宠物猫信息
Iterator it=set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
//再添加一个与花花属性一样的猫
Cat huahua01=new Cat("花花",12,"英国短毛猫");
set.add(huahua01);
System.out.println("*******************************");
System.out.println("添加重复数据后的宠物猫信息");
it=set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
System.out.println("********************************");
//重新插入一个新的宠物猫
Cat huahua02=new Cat("花花二代",2,"英国短毛猫");
set.add(huahua02);
System.out.println("添加花花二代后的宠物猫信息:");
it=set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
System.out.println("********************************");
//在集合中查找花花的信息并输出
//第一种查找方式:使用对象名去查找
if(set.contains(huahua)) {
System.out.println("花花找到了!");
System.out.println(huahua);
}else {
System.out.println("花花没找到!");
}
//在集合中使用名字超找花花的信息
System.out.println("********************************");
System.out.println("这是通过名字查找花花的信息");
boolean flag=false;
Cat c=null;
it=set.iterator();
while(it.hasNext()) {
c=(Cat)it.next();
if(c.getName().equals("花花")) {
flag=true;//找到了
break;
}
}
if(flag) {
System.out.println("花花找到了");
System.out.println(c);
}else {
System.out.println("花花没找到");
}
}
}
二 ******************************************************
二 ******************************************************
二 ******************************************************
/*定义一个学生类,使用HashSet对学生类的对象进行管理:执行添加操作,然后解决重复数据的添加问题。
任务
1、 定义一个学生类Student
(1)属性为:学号stuId(int),姓名name(String),成绩score(float)
(2)方法为:构造方法,getter和setter方法,toString方法
(3)重写hashCode()和equals()方法,equals方法的判断依据是学号和姓名相等
2、定义三个Student类的对象,添加到HashSet中
3、显示HashSet中元素的内容
4、添加一个重复数据到Set中,观察输出结果
*/
package com.set;
public class Student {
private int stuId;// 学号
private String name;// 姓名
private float score;// 成绩
// 构造方法
public Student(int stuId, String name, float score) {
super();
this.stuId = stuId;
this.name = name;
this.score = score;
}
// getter与setter方法
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;
}
// toString方法
@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) {
// 判断对象是否相等,相等则返回true,不用继续比较属性了
if (this == obj)
return true;
// 判断obj是否是Student类的对象
if (obj.getClass() == Student.class) {
Student stu = (Student) obj;
return stu.getName().equals(name) && (stu.getStuId()== stuId);
}
return false;
}
}
package com.set;
import java.util.*;
public class StudentTest {
public static void main(String[] args) {
// 2、定义三个Student类的对象,添加到HashSet中
Student stu1=new Student(3,"William",65f);
Student stu2=new Student(1,"Tom",87f);
Student stu3=new Student(2,"Lucy",95f);
//添加
Set set=new HashSet();
set.add(stu1);
set.add(stu2);
set.add(stu3);
//3、显示HashSet中元素的内容
Iterator it=set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
//4、添加一个重复数据到Set中,观察输出结果
System.out.println("*****************************");
System.out.println("添加重复数据后");
Student stu4=new Student(3,"William",65f);
set.add(stu4);
it=set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}