найти код ха sh до и после добавления в HashMap - PullRequest
0 голосов
/ 23 апреля 2020
  1. Если я переопределяю код Equal и Ha sh, то оба результата будут:

Ha sh Объекты кода перед добавлением в HashMap
66935837 66935837 Ha sh Code объекты после добавления в HashMap 1013767008 1013767008 Ха sh Код для карты HashMap

1066502013

Извлечение из HashMap: 1066502013

Вопрос: Почему Ха sh Код объектов перед добавлением в HashMap отличается от Ha sh Код объектов после добавления в HashMap? и тогда почему, когда мы проверяем код ha sh для Ha sh код карты HashMap отличается от объектов Ha sh Code после добавления в HashMap? Почему Ha sh Код для карты HashMap такой же, как Retrive из HashMap?

Если мы просто переопределим Equal, то получим:

Ha sh Объекты кода перед добавлением в HashMap -1365619213 -1631168243 Ha sh Объекты кода после добавления в HashMap 2347 1013767008 Ha sh Код для карты HashMap

1363461957

Извлечение из HashMap: 1363461957 IT 1363461957 Безопасность

Вопрос: согласно "https://www.geeksforgeeks.org/override-equalsobject-hashcode-method/" (если мы только переопределяем метод equals (Object), когда мы вызываем map.put (obj1, "IT"); он будет иметь sh для некоторого местоположения сегмента и когда мы вызываем map.put (obj2, "Security"); ha sh в другое место, из-за другого значения хэш-кода, поскольку метод hashCode () не был переопределен). Но в моем выводе для Retrive из HashMap код ha sh (1363461957) одинаков, поэтому расположение сегмента для ИТ и безопасности одинаково. Это против того, что упомянули гики для гиков. Можете ли вы уточнить это? Почему Ха sh Код для карты HashMap такой же, как Retrive из HashMap?

Если мы просто переопределим Hashcode, то получим:

Ha sh Объекты кода перед добавлением в HashMap 66935837 66935837 Ha sh Объекты кода после добавления в HashMap 2347 1013767008 Ha sh Код для карты HashMap

1133436083

Извлечение из HashMap: 1133436083 IT 1133436083 Безопасность

Вопрос: Почему объекты Ha sh Code перед добавлением в HashMap являются такими же ha sh код? Почему Ha sh Код для карты HashMap такой же, как Retrive из HashMap?

publi c class HashEqualmethod {

String name;
int id;

public HashEqualmethod(String name, int id) {
    super();
    this.name = name;
    this.id = id;
}

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

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




public static void main(String[] args) {

    HashEqualmethod obj1 = new HashEqualmethod("Ehsan", 1 );
    HashEqualmethod obj2 = new HashEqualmethod("Ehsan", 1 );

    System.out.println("Hash Code objects before adding in HashMap");
    System.out.println(obj1.hashCode());
    System.out.println(obj2.hashCode());

    HashMap<HashEqualmethod, String> map = new HashMap<HashEqualmethod,String>(); 
    map.put(obj1 , "IT" );
    map.put(obj2, "Security");

    System.out.println("Hash Code objects after adding in HashMap");
    System.out.println(map.get(obj1).hashCode());
    System.out.println(map.get(obj2).hashCode());

    System.out.println("Hash Code for map HashMap");
    System.out.println(map.hashCode());

    System.out.println("-----------");

    System.out.println("Retrive from HashMap:");
    for(HashEqualmethod ob:map.keySet()) {
        System.out.println(map.hashCode());
        System.out.println(map.get(ob));
    }

}

}

...