2016-06-20 2 views
0

//このコードの出力は3ではなく5になります //なぜこのコードの出力は3ではなく5ですか? //このコードの出力5の代わりに、このコードの出力は、public int hashcode()をすることになっていない5の代わりに、3以下のコードは、サイズを5として返すのですか? hashcodeとequalsメソッドがオーバーライドされても、セットサイズが返されます3

public class Dummy { 

    public static void main(String[] args) { 

     Set set = new HashSet(); 

     set.add(new Student("abc")); 

     set.add(new Student("abcd")); 

     set.add(new Student("abc")); 

     set.add(new Student("abc")); 

     set.add(new Student("abcdef")); 

     System.out.println(set.size()); 

    } 
} 

class Student 
{ 
    private String age; 

    public Student(String age) 
    { 
     this.age=age; 
    } 

    public boolean equals(Student stu) 

    { 
     System.out.println("equals from Student parameter called"); 
     return false; 
    } 

    public boolean equals(Object obj) 

    { 
     System.out.println("equals from Object parameter called"); 

     return true; 
    } 

    public int hashcode() 

    { 
     System.out.println("hashcode called"); 

     return 17; 

    } 
} 
+1

'public int hashcode()'はオーバーライドではないため、@Overrideアノテーションを使用する必要があります。私はあなたがどのように3の結果を期待するかわかりません。 –

答えて

3

である理由だけequals()をオーバーライドしてきたので、それは、public int hashCode()だ// 3です。同じハッシュをすべて取得するわけではないので、異なるバケット内のオブジェクトは、(実装に基づいて)「等しい」ことがあります。

@Overrideアノテーションは、この種のケースで非常に役立ちます。

+0

ok私は訂正しました!今私は間違いを知って、私は適切なオーバーライドされたhashcodeメソッドを識別することができません。それを認めてくれてありがとう! @override public int hashCode()の場合、適切なオーバーライドされたメソッドを置くと、出力は1なぜですか? – Tirumalesh

+1

@ user3721157すべてのインスタンスが同じになるようにクラスを定義しているためです。 'equals()'もオーバーロードされていますが、 'HashSet'は' equals(Object) 'を使っているので、ここで何もしません。 – Kayaman

関連する問題