使用Java的equals和hashcode方法实现哈希表
为了实现哈希表,我们应该使用哈希表类,它将键映射到值。哈希表的键或值应该是非空对象。为了从哈希表中存储和检索数据,用作键的非空对象必须实现 hashCode() 方法和 equals() 方法。Hashtable产生的输出是无序和未排序的形式。
例1
在这个哈希表中,字符串为键,学生对象为值。为了避免重复键,它已经实现了 hashCode() 和 equals() 方法。在情况下,如果我们输入重复的键,那么哈希表会自动消除重复的键
// 主类
import java.util.Hashtable;
import java.util.Scanner;
public class HashtableExample2 {
public static void main(String a[])
{
// 初始化哈希表,键为String,值为Student对象
Hashtable<String, Student> list
= new Hashtable<String, Student>();
list.put("Ram",
new Student(1, "Ram", "8907654321"));
list.put("Sita",
new Student(2, "Sita", "9809876543"));
list.put("Mohan",
new Student(3, "Mohan", "9098765421"));
list.put("Soham",
new Student(4, "Soham", "7898790678"));
list.put("Lakhan",
new Student(5, "Lakhan", "7890567845"));
// 使用for-each循环遍历哈希表
System.out.println("遍历哈希表");
for (Student i : list.values()) {
System.out.println(i);
}
System.out.println();
// 通过名字搜索学生
System.out.println(
"按学生ID查找学生");
System.out.println();
System.out.println("输入学生ID:");
int temp = 3;
System.out.println("3");
for (Student s : list.values()) {
if (s.getRollno() == temp) {
// 如果找到,则打印学生详情
System.out.println("学生是:" + s);
// 终止程序
System.exit(0);
}
}
// 如果找不到学生,则打印没有学生
System.out.println("未找到学生..");
}
}
// 学生类
class Student {
// 初始化实例变量
private int rollno;
private String name;
private String mobno;
// 构造函数初始化变量的值
public Student(int rollno, String name, String mobno)
{
super();
this.rollno = rollno;
this.name = name;
this.mobno = mobno;
}
// 获取学号
public int getRollno() { return rollno; }
// 设置学号
public void setRollno(int rollno)
{
this.rollno = rollno;
}
// 获取名字
public String getName() { return name; }
// 设置名字
public void setName(String name) { this.name = name; }
// 获取电话号码
public String getMobno() { return mobno; }
// 设置电话号码
public void setMobno(String mobno)
{
this.mobno = mobno;
}
// hashCode方法的重写
@Override public inthashCode()
{
return this.getRollno();
}
// equals方法的重写
// @Override
public boolean equals(Object o)
{
if (o instanceof Student) {
return (this.rollno) == (((Student)o).rollno);
}
return false;
}
// toString方法的重写
@Override public String toString()
{
return "Rollno=" + rollno + ", name=" + name
+ ", mobno=" + mobno;
}
}
输出
遍历哈希表
Rollno = 2,姓名 = Sita,电话号码 = 9809876543
Rollno = 3,姓名 = Mohan,电话号码 = 9098765421
Rollno = 5,姓名 = Lakhan,电话号码 = 7890567845
Rollno = 4,姓名 = Soham,电话号码 = 7898790678
Rollno = 1,姓名 = Ram,电话号码 = 8907654321
按学生ID搜索学生
输入学生ID:
3
学生为:Rollno=3,姓名=Mohan,电话号码=9098765421
极客教程