Как получить значение из HashMap, когда у нас есть пользовательский объект в качестве ключа, как показано ниже - PullRequest
0 голосов
/ 13 ноября 2018

Ниже я хочу значение 400, которое нужно напечатать, передав его ключ.Могу ли я узнать, как это сделать?

  public static void main(String[] args) {
    HashMap<Student, Integer> hmap=new HashMap<Student, Integer>();

    hmap.put(new Student(101, "Srinu", 5000), 100);
    hmap.put(new Student(102, "Srinu", 5000), 200);
    hmap.put(new Student(103, "Srinu", 5000), 300);
    hmap.put(new Student(104, "Srinu", 5000), 400);

    System.out.println(hmap.get(new Student(104, "Srinu", 5000)));
    System.out.println(hmap.containsKey(new Student(104, "Srinu", 5000)));

  }

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Добавьте эти два метода в ваш файл Student.java:

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    result = prime * result + no;
    result = prime * result + num;
    return result;
}


@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Student other = (Student) obj;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    if (no != other.no)
        return false;
    if (num != other.num)
        return false;
    return true;
}

Я полагаю, что после добавления этих двух методов ваш код будет работать нормально.

0 голосов
/ 13 ноября 2018

Вам необходимо переопределить метод hashCode() и equals() вашего класса Student. Позвольте вашей IDE автоматически генерировать эти два.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...