Metoda equals a HashSet

0

Witam. Mój problem polega na tym, że nie rozumiem, dlaczego dwa obiekty Number zostają bez problemu dodane do zbioru HashSet i operacja dodawania drugiego elementu też zwraca true, jeżeli metoda equals wyraźnie informuje, że obiekty są równe. Co można na to poradzić? Z góry dziękuję za pomoc
Oto kod:

import java.util.*;
import java.io.*;
public class test2
{
    public static class Number
    {
        String number;
        public Number(String n)
        {
            number=new String(n);
        }
        public boolean equals(Object ob)
        {
            Number s=(Number)ob;
            return s.number.startsWith(number) || number.startsWith(s.number);
        }
        public int hashCode()
        {
            return number.hashCode();
        }
    }
    public static void main(String[] args)throws IOException
    {
        PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)),true);
        StreamTokenizer st=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        Set<Number> set = new HashSet<Number>(); 
        Number n1=new Number("911");
        Number n2=new Number("91123");
        out.println(set.add(n1));
        out.println(set.add(n2));
        out.println(n1.equals(n2));
}
}
0

Jeśli mają różny hashCode to raczej HashSet nie uzna je za równe. Poczytaj jakie warunki muszą spełniać funkcje hashCode i equals. Podpowiedź: jednym z tych warunków jest taki, że jeżeli equals daje true dla dwóch obiektów, to ich hashCode powinny być równe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1