使用Java的equals和hashcode方法实现哈希表

使用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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程