簡體   English   中英

當我們將自定義類對象作為鍵和值傳遞時,如何根據鍵名從HashMap獲取值

[英]How to get value from HashMap depending on key name, while we are passing custom class objects as key and value

當我們將自定義類對象作為鍵和值對傳遞時,如何根據鍵名從哈希映射中獲取值。在下面的代碼中,當我使用get方法通過鍵檢索值時,我遇到了編譯時錯誤。 請幫助我。

HashMap<Employee1, Department1> hm= new HashMap<Employee1, Department1>();
    hm.put(new Employee1(0, "name1", 25, 46666), new Department1(0, "developer"));
    hm.put(new Employee1(0, "name2", 50, 40000), new Department1(0, "tester"));
    hm.put(new Employee1(0, "name3", 34, 3000), new Department1(0, "hr"));
    hm.put(new Employee1(0, "name4",30, 26666), new Department1(0, "manager"));
    hm.put(new Employee1(0, "name5",28, 15000), new Department1(0, "accountant"));

    Department1 value = (Department1) hm.get(0, "name5",28, 15000);
    System.out.println(value);

部門java

package org.task;
public class Department1 {
private int deptid;
private String deptname;

public int getDeptid() {
    return deptid;
}
   public String getDeptname() {
    return deptname;
}

public Department1(int deptid, String deptname) {
    this.deptid = deptid;
    this.deptname = deptname;

}

}

Employee.java-

package org.task;
public class Employee1 {
private int id;
private String name;
private int age;
private long salary;

public int getId() {
    return id;
}

public String getName() {
    return name;
}

public int getAge() {
    return age;
}

public long getSalary() {
    return salary;
}

public Employee1(int id, String name, int age, int salary) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.salary = salary;
}
}

我想通過傳遞部門ID或部門名稱來檢索員工的所有詳細信息

您必須重寫Employee類的equals方法,然后才能使用

Employee1 testEmp =  new Employee1(0, "name5",28, 15000);
Department1 value = (Department1) hm.get(testEmp);
System.out.println(value);

如果要在HashMap或HashSet中將某些類用作鍵,則需要向其添加equals()和hashCode()方法。 喜歡:

public static class Employee1 {
    private int id;
    private String name;
    private int age;
    private long salary;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public long getSalary() {
        return salary;
    }

    public Employee1(int id, String name, int age, int salary) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Employee1 employee1 = (Employee1) o;

        if (age != employee1.age) return false;
        if (id != employee1.id) return false;
        if (salary != employee1.salary) return false;
        if (!name.equals(employee1.name)) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + name.hashCode();
        result = 31 * result + age;
        result = 31 * result + (int) (salary ^ (salary >>> 32));
        return result;
    }
}

之后,可以像下面這樣通過新鍵來尋找價值:

public static void main(String[] args) throws Exception {
    HashMap<Employee1, Department1> hm = new HashMap<Employee1, Department1>();
    hm.put(new Employee1(0, "name1", 25, 46666), new Department1(0, "developer"));
    hm.put(new Employee1(0, "name2", 50, 40000), new Department1(0, "tester"));
    hm.put(new Employee1(0, "name3", 34, 3000), new Department1(0, "hr"));
    hm.put(new Employee1(0, "name4", 30, 26666), new Department1(0, "manager"));
    hm.put(new Employee1(0, "name5", 28, 15000), new Department1(0, "accountant"));

    Department1 value = hm.get(new Employee1(0, "name5", 28, 15000));
    System.out.println(value);
}

並且如果您需要執行System.out.println(value); 您需要將toString()方法添加到Department1。 喜歡:

    @Override
    public String toString() {
        return "Department1{" +
                "deptid=" + deptid +
                ", deptname='" + deptname + '\'' +
                '}';
    }

檢查波紋管類以獲得結果。

MainTest.java

import java.util.HashMap;

/**
* @author Rajesh
*
*/
public class MainTest {

public static void main(String []args)
{
    HashMap<Employee, Department> hm= new HashMap<Employee, Department>();
    hm.put(new Employee(0, "name0", 20, 46666), new Department(0, "developer"));
    hm.put(new Employee(0, "name0", 25, 46666), new Department(0, "tester"));
    hm.put(new Employee(0, "name3", 34, 3000), new Department(0, "hr"));
    hm.put(new Employee(0, "name4",40, 26666), new Department(0, "manager"));
    hm.put(new Employee(0, "name5",28, 15000), new Department(0, "accountant"));
    Department value = (Department) hm.get(new Employee(0, "name3", 34, 3000));
    System.out.println(value);

}
}

//獲取對象值的通用類

MainData.java

/**
* @author Rajesh
*
*/

import java.lang.reflect.Field;

public class MainData<E> {

Class c;
public String toStringData(E e1) {
    // TODO Auto-generated method stub
    StringBuffer getData= new StringBuffer();
    try {
        c=e1.getClass();;
         Field fields[] = c.getDeclaredFields();
         for (Field field : fields) {
             Object fieldValue = field.get(e1);
             getData.append(field.getName()+":"+fieldValue+",");
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return getData.toString();
}
}

部門.java

/**
* @author Rajesh
*
*/

public class Department extends MainData<Department> {

public int deptid;
public String deptname;
public int getDeptid() {
    return deptid;
}
public void setDeptid(int deptid) {
    this.deptid = deptid;
}
public String getDeptname() {
    return deptname;
}
public void setDeptname(String deptname) {
    this.deptname = deptname;
}
public Department(int deptid, String deptname) {
    this.deptid = deptid;
    this.deptname = deptname;
}

@Override
public String toString() {
    // TODO Auto-generated method stub
    //for getting object value
    return super.toStringData(this);
}


}

Employee.java

/**
* @author Rajesh
*
*/

public class Employee {

private int id;
private String name;
private int age;
private long salary;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
public long getSalary() {
    return salary;
}
public void setSalary(long salary) {
    this.salary = salary;
}
public Employee(int id, String name, int age, long salary) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.salary = salary;
}

@Override
public boolean equals(Object obj) {
    Employee employee = (Employee) obj;
    //compare all the property 
    if (this.age != employee.age) return false;
    if (this.id != employee.id) return false;
    if (this.salary != employee.salary) return false;
    if (!this.name.equals(employee.name)) return false;
    return true;
}

@Override
public int hashCode() {
    //return any unique code
    return this.id+this.name.hashCode()+this.age+(int)this.salary;
}


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM