有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java修改类,使其可以用作HashMap中的键

class Employee

{

    private String name;
    private int age;
    private int empid;

    public Employee(String name, int age, int empid) 
    {
        super();
        this.name = name;
        this.age = age;
        this.empid = empid;
    }
}

如何修改上述类,使其可以用作HashMap中的键


共 (5) 个答案

  1. # 1 楼答案

    它已经可以在hashmap中使用了所有Java对象都有一个hashCodeequals方法,这是hashmap工作所必需的

    Map<Employee, Whatever> theMap = new HashMap<Employee, Whatever>();
    
  2. # 2 楼答案

    对于要在hashmap中用作键的类,基本上需要做三件事。首先使类不可变,第二个重写hashCode方法,第三个重写equals方法

    使类不可变。以下是一些不变性规则:

    • 期末考试
    • 使所有成员为最终成员,在静态块或构造函数中显式设置它们
    • 将所有成员保密
    • 没有修改状态的方法

    从本教程了解有关创建不可变类的更多信息:

    http://javarevisited.blogspot.in/2013/03/how-to-create-immutable-class-object-java-example-tutorial.html

    要了解覆盖hashCode和equals方法,请遵循以下步骤:

    http://javarevisited.blogspot.in/2011/02/how-to-write-equals-method-in-java.html

  3. # 3 楼答案

    为了将类用作有效的哈希映射键,该类应该同时重写equalshashCodehashCode变量返回一个int,用于计算此特定对象的低级查找索引

    使类不可变也是一个好主意,就好像hashCode在程序中更改一样,您的密钥现在是无用的

  4. # 4 楼答案

    在HashMap中将自定义类作为键的充分条件

       1. Override equals and Hashcode - good practice.
          Read Item 8 and Item 9 from Effective Java (must Read) for 
          the general contract among them.
       2. Try to make your Class Immutable. Atleast 
          those fields should be final/immutable on which your hashcode 
          and equals depend. So that you hashcode/equals in dosen't fail later
          in your program
    

    如果您认为只想检查引用上的相等性(不推荐),则使用IdentityHashMap

  5. # 5 楼答案

    你什么都不用做。所有类都扩展了对象类。由于方法hashcode()equals()是在对象类中定义的,所以任何类都可以用作键

    但是,如果您确实决定将类用作HashMap键,则应该重写这两个方法

    如果您使用Eclipse作为IDE,它可以为您生成这两个函数
    只需单击源代码中的任意位置-> 来源-> 生成Hashcode()和equals()