HashSet

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

}

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容