Что произойдет, если мы переопределим только hashCode () в классе и используем его в множестве?

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

Я создаю набор объектов классаUsingSet, Согласно концепции хеширования в Java, когда я впервые добавляю объект, который содержит «a», он создает корзину с хэш-кодом 97 и помещает объект в нее. Опять же, когда он встречает объект с «a», он вызывает переопределенный метод хеш-кода в классе UsingSet и получает хеш-код 97, что дальше?

Поскольку я не переопределил метод equals, реализация по умолчанию вернет false. Итак, где же будет храниться Объект со значением «а», в том же контейнере, где хранился предыдущий объект с хеш-кодом 97? или это создаст новое ведро? Кто-нибудь знает, как он будет храниться внутри?

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

class UsingSet {  

  String value;  

  public UsingSet(String value){  
    this.value = value;  
  }  

  public String toString() {  
    return value;  
  }  

  public int hashCode() {  
    int hash = value.hashCode();  
    System.out.println("hashcode called" + hash);  
    return hash;  
  }  

  public static void main(String args[]) {  

    java.util.Set s = new java.util.HashSet();  

    s.add(new UsingSet("A"));  
    s.add(new UsingSet("b"));  
    s.add(new UsingSet("a"));  
    s.add(new UsingSet("b"));   
    s.add(new UsingSet("a"));  

    s.add(new Integer(1));  
    s.add(new Integer(1));  

    System.out.println("s = " + s); 

  }  
}  

вывод:

hashcode called65
hashcode called98
hashcode called97
hashcode called98
hashcode called97
s = [1, b, b, A, a, a]

Ответы на вопрос(5)

Ваш ответ на вопрос