如何在不使用Set的情况下从此列表中删除重复元素?

时间:2014-10-24 08:30:38

标签: java

class A {
    public static void main(String args[]) {
        List<Emp> l=new ArrayList<Emp>();
        l.add(new Emp(1,23000,"ram");
        l.add(new Emp(2,24000,"aam");
        l.add(new Emp(1,23000,"ram");
    }
}

class Emp {
    int id, salary, name;

    Emp(int id, int salary,int name) {
        this.id=id;
        this.salary=salary;   
        this.name=name;
    }
}

1 个答案:

答案 0 :(得分:2)

第一件事就是将equals()hashCode()添加到你的Emp类中,就像这样(没有构造函数,getter和setter):

public class Emp {
  private int id;
  private int salary;
  private int name;

  @Override
  public boolean equals(final Object o) {
    if (this == o) {
      return true;
    }
    if (!(o instanceof Emp)) {
      return false;
    }

    final Emp emp = (Emp) o;

    if (id != emp.id) {
      return false;
    }
    if (name != emp.name) {
      return false;
    }
    if (salary != emp.salary) {
      return false;
    }

    return true;
  }

  @Override
  public int hashCode() {
    int result = id;
    result = 31 * result + salary;
    result = 31 * result + name;
    return result;
  }
}

然后你可以编写一个方法:

public List<Emp> removeDuplicate(final List<Emp> items) {
    final List<Emp> result = new ArrayList<Emp>();
    final List<Emp> doublettes = new ArrayList<Emp>();
    for(final Emp item : items) {
        if (!doublettes.contains(item) {
            result.add(item);
            doublettes.add(item);
        }
    }
    return result;
}

顺便问一下,你真的想要一个名字int吗?在您的示例中,您使用String并在构造函数int中。如果您需要String,则必须修改equals()hashCode()