Java中对list集合使用HashSet去重不成功

原因:List中储存的对象类型的元素,而在类中没有重写equals()和hashCode()方法。

我这里是有一个field类(未修改之前的代码)。

public class filed {
    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

在Servlet中对list集合用HashSet去重

//部分代码如下
List<filed> hangye1 = new ArrayList<filed>();
while (rs.next()) {
                filed f=new filed();
                f.setName(rs.getString(1));
                //System.out.println(rs.getString(1).split("\s+")[0]); //测试数据获取
                hangye1.add(f);
            }
//使用HashSet方法
HashSet<filed> set = new HashSet<filed>(hangye1);
hangye1.clear();
hangye1.addAll(set);
for(int i=0;i<hangye1.size();i++) {
        System.out.println(hangye1.get(i).name);
    }

执行结果发现,list中存在相同元素。

修改filed类

public class filed {
    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @Override
       public boolean equals(Object o) {
           if(this == o){
               return true;
           }
           if(o == null){
               return false;
           }
     
           if(getClass() != o.getClass()){
               return false;
           }
           filed user = (filed) o;
           if(name == null){
               if(user.name !=null){
                   return false;
               }
           }else{
               if(!name.equals(user.name)){
                   return false;
               }
           }
           return true;
       }
     
       @Override
       public int hashCode() {
           return 1;
       }
}

再次执行,去重操作执行。问题是解决了,但是原理还没看明白。

原理参考:https://blog.csdn.net/fjian123/article/details/79534586

原文地址:https://www.cnblogs.com/janeszj/p/12568775.html