如何基于java中唯一的两个对象属性实现唯一的自定义集合

时间:2015-07-16 10:31:48

标签: java data-structures collections

如何基于两个唯一的对象属性实现唯一的自定义集合。 假设我有很多自定义对象,我想要一个唯一的集合,其中属性rolls_class一起不应该复制此集合中的任何tow对象。

class Cl {
    private int roll;
    private String s_class;
    private String name;
    private Date dob;
}

2 个答案:

答案 0 :(得分:1)

正如@nafas所说,你需要使用Hashset来完成你的任务。并在类中实现equals()和hashCode()。只需使用更多指南粘贴我的代码。

public class Cl {

    // We should not have setter for these fields
    private int roll;
    private String s_class; 


    private String name;
    private Date dob;


    @Override
    public int hashCode(){
        return Objects.hash(s_class,roll);
    }

    @Override
    public boolean equals(Object temp){
        if(!( temp instanceof Cl) ){
            return false;
        }
        Cl tempObj = (Cl)temp;

        String s_classTemp = tempObj.s_class;

        if(this.s_class == null && s_classTemp == null){
            return true;
        }

        if(this.s_class == null && s_classTemp != null){
            return false;
        }


        return (tempObj.roll == this.roll) && (this.s_class.equals(tempObj.s_class));
    }
}

答案 1 :(得分:-1)

我建议使用Set<C1>作为您的收藏品

设置不包含duplicates,因此接下来要确保您的每个C1都是unique,然后再将它们添加到您的设置中。

您需要覆盖班级中的hashCode()equals(Object o)方法:

class Cl {
.
.
.

   private Integer myHash= null;

   @Override
   public int hashCode(){
       if(myHash!=null){
          return myHash;
       }
       myHash= Objects.hashCode(roll, s_class);

       return myHash;
   }

   @Override
   public boolean equals(Object o){
      if(o == this){
        return true;
      }

      if(o instanceOf C1){
        C1 c1 = (C1) o;
        if(c1.s_class==null){
           return c1.roll == this.roll && this.s_class == null;
        }
        else {
          return c1.roll == this.roll  && c1.s_class.equals(this.s_class);
        }
      }
   }

}