【问题标题】:Remove duplicate objects from ArrayList从 ArrayList 中删除重复的对象
【发布时间】:2026-01-03 08:20:03
【问题描述】:

我有一个 Java 类

class Students{
    private String fName;   
    private String lName;
    private String uName;


    public Students(String fName, String lName, String uName) {
            this.fName = fName;
            this.lName = lName;
            this.uName = uName;
     }      

    public String getuName() {
        return uName;
    }
    public void setuName(String uName) {
        this.uName = uName;
    }
    public String getfName() {
        return fName;
    }
    public void setfName(String fName) {
        this.fName = fName;
    }
    public String getlName() {
        return lName;
    }
    public void setlName(String lName) {
        this.lName = lName;
    }

}

现在我将对象创建为;

    Students students1 = new Students("har","mat","harmat");
    Students students2 = new Students("pan","son","panson");
    Students students3 = new Students("yogi","jos","yogijos");

    Students students4 = new Students("har","mat","harmat");
    Students students5 = new Students("pan","son","harmat");
    Students students6 = new Students("yogi","jos","someotherUName");
    Students students7 = new Students("yogi","jos","someotherUName2");

现在所有这些对象都被添加到组合列表中

List combinedList = new ArrayList<SchoolStudents>();

我想根据以下条件从这个组合列表中删除重复的对象; 如果 fName 相同或 uName 相同。

【问题讨论】:

标签: java arraylist


【解决方案1】:

如果这是确定 2 名学生是否相等的一般标准,您可以覆盖班级中的 equalshashcode,以根据您的标准使 2 名学生相等。

然后您可以将学生添加到一个集合(通常是 HashSet,这将自动删除重复项。

【讨论】:

    【解决方案2】:

    将它们存储在Set(例如TreeSet)中,并在构造时向Set 提供满足fNameuName 相同条件的Comparator

    (我假设重复的定义对学生来说是外部的,例如它在不同的时间意味着不同的东西。如果它是学生固有的,那么@assylias 的答案更有意义)。

    【讨论】:

      【解决方案3】:

      如果您需要一个唯一的列表,我建议您使用 List 界面中的任何内容。你最好使用Set

      覆盖 hashCode()equals() 类的 Students 方法

      【讨论】:

        【解决方案4】:

        建议在您的学生类中实现equals()hashCode(),并使用HashSet 来强制唯一性。

        【讨论】:

          【解决方案5】:
          public List<User> removeDuplicateFromList(List<User> list){
              int s=0;
              List<User> users=new ArrayList<User>();
              for(User us1 :list){
                  for(User us2:users){
                  if(us1.getIdUser()==us2.getIdUser()){
                      s=1;
                  }else{
                      s=0;
                  }
          
                  }   if(s==0){
                      users.add(us1);
                  }
          
              }
              return users;
          }
          

          【讨论】: