2017-02-28 2 views
-3

私はハッシュマップ、値の整数を持つ人は、私はマップに2つのオブジェクトを入れている、私は単一のエントリはどのように

class Employee{ 
    private int id; 
    public Employee(int i) { 
     // TODO Auto-generated constructor stub 
     this.id = i; 
    } 
} 

public class HashMapExample { 

    public static void main(String[] args) { 
     HashMap<Employee,Integer> map =new HashMap<Employee,Integer>(); 
     map.put(new Employee(101),10); 
     map.put(new Employee(101),20); 

     System.out.println(map); 
     Employee emp; 
     for(Map.Entry<Employee,Integer> entry : map.entrySet()){ 
      System.out.println(entry.getKey()+" "+entry.getValue()); 
      emp = entry.getKey(); 
      System.out.println(emp.equals(emp)); 
      emp.hashCode(); 

     } 
    } 

} 
に必要になったとしてもuserdefindオブジェクトの値が同じであるハッシュマップから単一のエントリを取得します

私はこれらの2つのエントリから単一のエントリを取得する必要があります。

+1

あなたは2つの値に同じキーをマッピングすることはできません。あなたは何をしようとしているのですか? – shmosel

+1

ああ、あなたはそれが上書きされていない理由を理解しようとしているのですか? – shmosel

+2

これをキーとして使用するには、 'Employee'に' equals() 'と' hashCode() 'を実装する必要があります。 – shmosel

答えて

-1

ハッシュマップは内部的にハッシュテーブルを使用するため、このような動作が必要な場合、ハッシュコードと等価メソッドを従業員クラスに実装する必要がある場合、それらのメソッドは同じオブジェクトあなたが望むものを達成するために、

+0

私はOPがやろうとしていることが好奇妙です。 – shmosel

+0

私はOPが、なぜあなたが推測したように、第2の「put」が最初に上書きしないのかを理解しようとしていると思います。 –

+0

あなたはいくつかのサンプルコードベースを共有できるので、私にとって助けになるでしょう –

1

私はあなたが欲しいものを本当にわからないんだけど、Shmoselの推測が正しいと仮定して、あなただけの二putあなたは中ObjectクラスのequalshashCodeメソッドをオーバーライドすることができ、最初のを上書きすることを確認しますEmployeeクラス:

import java.util.HashMap; 

class Employee{ 
    private int id; 
    public Employee(int i) { 
     this.id = i; 
    } 
    public int getId() 
    { 
     return id; 
    } 
    @Override 
    public boolean equals(Object o) { 
     return this.id == ((Employee) o).id; 
    } 
    @Override 
    public int hashCode() { 
     Integer idInt = new Integer(id); 
     return idInt.hashCode(); 
    } 
} 
public class HashMapExample { 
    static HashMap<Employee,Integer> hm = new HashMap<>(); 
    public static void main(String args[]) { 
     hm.put(new Employee(100),10); 
     hm.put(new Employee(100), 20); 
     hm.put(new Employee(200), 50); 
     for (Employee e: hm.keySet()) { 
      System.out.println("Employee " + e.getId() + ", value = " + hm.get(e)); 
     } 



    } 
} 

出力例:

Employee 100, value = 20 
Employee 200, value = 50 
+0

ありがとう@ダビデ、これは私が期待しているものです。 –