这是一个list集合,但是第一个元素和第四个元素重复.怎么去掉重复啊?
  试了 几次都不行.
groups=new ArrayList<UserPrivilegeModel>();
Set<UserPrivilegeModel> s=new HashSet<UserPrivilegeModel>();
for (int i = 0; i < outModel.getGroups().size(); i++) {
s.add(outModel.getGroups().get(i));
}UserPrivilegeModel的hashCode和equals如下,这个eclipse自动生成的 @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((sepAuthId == null) ? 0 : sepAuthId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final UserPrivilegeModel other = (UserPrivilegeModel) obj;
if (sepAuthId == null) {
if (other.sepAuthId != null)
return false;
} else if (!sepAuthId.equals(other.sepAuthId))
return false;
return true;
}

解决方案 »

  1.   

                groups=new ArrayList<UserPrivilegeModel>();
                Set<UserPrivilegeModel> s=new HashSet<UserPrivilegeModel>();
                for (int i = 0; i < outModel.getGroups().size(); i++) {
                      if(!s.contains(outModel.getGroups().get(i))){              
                          s.add(outModel.getGroups().get(i));
                      }
                }
      

  2.   

    这样还是不行啊.
      我想主要是在hashCode和equals怎样写,但是我不会
      

  3.   

    Set <UserPrivilegeModel> s=new HashSet <UserPrivilegeModel>(); 
    s.addAll(groups);
      

  4.   

    你为什么会认为ArrayList中的元素是重复的呢?总有一个理由吧,比如,他们的ID相同?
    把你的这个理由用java语言表达到equals方法里去,就可以了。至于hashCode,查查去吧,保证hashCode和equals的原则就行了。
    另外,如果你认为不能有重复的元素,那你应该选择Set做为容器,而不是List。
      

  5.   

    一个对象重复的往list中添加了两次,所以肯定重复了.
    hashCode和equals是这样写的,但是不行.不知为什么?    @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result
                    + ((sepAuthId == null) ? 0 : sepAuthId.hashCode());
            return result;
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            final UserPrivilegeModel other = (UserPrivilegeModel) obj;
            if (sepAuthId == null) {
                if (other.sepAuthId != null)
                    return false;
            } else if (!sepAuthId.equals(other.sepAuthId))
                return false;
            return true;
        }
      

  6.   

    也许是数据库检索出来以后,得到的就是有重复数据呢(当然,只是猜测。我不知道你有没有用数据库)。
    建议你将ArrayList换成Set,然后做填充。
    如果得到的结果仍然有重复,那我觉得是hashCode方法的问题。
    我觉得equals方法没啥毛病。
      

  7.   

    首先LZ應該用Set集合才對,equals方法建議LZ用DEBUG一步一步測試,這樣才能有保證!