0

デフォルトでは、セットに重複レコードを含めることはできませんが、クラスがあるとします

class Employee {
   Integer emp_id;
    String name;
   // other fields and their getter 
  Employee(String name) {
       emp_id++;
   this.name=name;
}
}

今、他のクラスでセットを宣言します

       set<Employee> empSet = new HashSet<Employee>();
      Employee e1 = new Employee ("abc");
      Employee e2 = new Employee ("abc");

セットに挿入しながら

      empSet.add(e1);
      empSet.add(e2);

次に、最初の e1 がセットに追加されますが、2 番目の e2 は false を返します。

今私が欲しいのは彼らの名前の重複がないことです. だから私はセットに挿入しながらチェックしたい。

4

3 に答える 3

0

クラス のhashcodeおよびequalsメソッドをオーバーライドする必要があります。Employee

オブジェクトごとに異なるデータを 入力することで、equalsメソッドの複製ポリシーを確保できます。hashcode

同じ実装の例を見つけてください。

于 2013-03-31T04:37:41.790 に答える
0

他のユーザーが述べたように、2 つの Employee オブジェクトが等しい/同じかどうかを判断する Employee クラスの hashCode() および equals() メソッドをオーバーライドする必要があります。

以下は、簡単に理解できるように実装例です。これにより、同じ名前の 2 つの Employee オブジェクトを Set に追加することはできなくなります。

public class Employee {
static int emp_id;
String name;
// other fields and their getter 
Employee(String name) {
  emp_id++;
  this.name=name;
}

@Override
public int hashCode() {
    int code = name.hashCode();
    return code;
}

@Override
public boolean equals(Object obj) {
Employee empObj = (Employee) obj;
if(empObj.name.equalsIgnoreCase(this.name)) {
      return true;
}
return false;
}
}

これが役立つことを願っています。

于 2013-03-31T05:03:05.797 に答える