-2

ハッシュ マップに 2 つのオブジェクトを追加しましたが、2 つの値のキーは同じです。hashcode と equals メソッドも実装しました。それでも、3 ではなく 2 つの値が表示されます。

コード:

package test1;

import java.util.HashMap;

public class HashMapDemo {

    int i;
    String abc;
    HashMapDemo(int a,String b){
        i=a;
        abc=b;
    }
    public String toString(){
        return i +abc;
    }

    public static void main(String[] args){
        HashMapDemo obj1= new HashMapDemo(2,"hello");
        HashMapDemo obj2= new HashMapDemo(3,"world");
        HashMapDemo obj3= new HashMapDemo(4,"around");
        toDos t1=new toDos("aa");
        toDos t2=new toDos("bb");
        toDos t3=new toDos("aa");
        HashMap test=new HashMap();
        test.put(t1,obj1);
        test.put(t2, obj2);
        test.put(t3,obj3);
        System.out.println(test.size()+""+test.get(obj2)+test);

    }
}

キーのコード:

package test1;

import java.util.HashMap;

class toDos
 {

        String a;
    toDos(String b){
        a=b;
    }
    public boolean equals(Object obj){
        System.out.println("call of equals");
        if((toDos)obj instanceof toDos & (toDos)obj !=null){
            toDos temp = (toDos) obj;
            if(temp.a.equals(this.a)){
                return true;
            }
        }
        return false;

    }
    public int hashCode(){
        System.out.println("call of hasCode");
        return (a!=null)? a.hashCode():0;
    }

    public String toString(){
        return a;
    }   
}
4

2 に答える 2

1

class toDosif is sameの equals メソッドによればString a、両方のオブジェクトは同じです。

HashMap test=new HashMap();
test.put(t1,obj1); // "aa"
test.put(t2,obj2); // "bb"
test.put(t3,obj3); //"aa"

したがって、Obj1 と obj2 の両方が同じオブジェクトとして扱われるため、古い値 obj1 は obj3 に置き換えられます。

于 2013-02-04T07:18:21.123 に答える
0

そのようですt1.equals(t3)-したがって、の挿入はt3最初に挿入されたエントリをオーバーライドします。

では、HashMap個別のキーごとに 1 つの関連付けられた値があり、t1t3が互いに等しいため、個別のキーは 2 つしかありません。

補足として、生の型の使用を避け、可能な限りジェネリック型を使用する必要があります。

于 2013-02-04T07:13:31.280 に答える