/*
*HashSet:此处简单实现了用HashSet集合存储自定义对象的实例。存入哈希结构集合的元素,一定要重写hashCode方法和equals方法。
*
*HashSet集合的增、删、查动作动会使用到,所操作对象的hashCode方法和equals方法。
*/
package classfile;
import java.util.*;
public class HashSetDemo
{
public static void main(String[] args)
{
HashSet<Student> hs = new HashSet<Student>();
hs.add(new Student("张三",20));
hs.add(new Student("李四",22));
hs.add(new Student("王五",23));
hs.add(new Student("张三",20));//此处为重复元素
for(Iterator<Student> iterator = hs.iterator();iterator.hasNext();)
{
Student s = iterator.next();
System.out.println("HashSet集合中的元素:"+s.getName()+"..."+s.getAge());
}
}
}
/**
*一个简单的学生类。
*/
class Student
{
private String name;
private int age;
/**
*创建一个学生对象。
*
*param name
* 指定学生的姓名
*param age
* 指定学生的年龄
*/
public Student(String name,int age)
{
this.name = name;
this.age = age;
}
/**
*用于获取学生的姓名。
*
*return
* 返回当前学生的姓名。
*/
public String getName()
{
return name;
}
/**
*用于获取学生的姓名。
*
*return
* 返回当前学生的年龄。
*/
public int getAge()
{
return age;
}
/**
*重写了父类的hashCode方法,使用name和age两个字段计算本对象的哈希值。
*
*return
* 返回本对象的特定的哈希值。
*/
public int hashCode()
{
System.out.println(name+"...hashCode");//由于查看此方法的被调用行为
return name.hashCode()+age*36;//*36为的是减小不同Student对象hashCode相同的几率
}
/**
*重写了父类的equals方法,使用name和age两个字段判断两个对象的相等性。
*
*return
* 返回两个对象的比较结果。
*/
public boolean equals(Object obj)
{
if(!(obj instanceof Student))
{
return false;
}
Student s = (Student)obj;
System.out.println(this.name+"...equals..."+s.name);//用于查看此方法的被调用行为
return this.name.equals(s.name) && this.age==s.age;
}
}
HashSet
最新推荐文章于 2022-04-11 22:49:28 发布