gpt4 book ai didi

java - 如何避免在 Java 中将重复数据添加到类 Arraylist 中

转载 作者:行者123 更新时间:2023-12-04 09:59:17 26 4
gpt4 key购买 nike

我正在尝试添加 Person 的新对象类到数组列表中。但我应该避免添加 只有 Person 类的一个属性的重复数据 .更准确地说,每个人都有唯一的 clientId。我需要检查不应将相同的 clientIds 添加到 arraylist 中。当我尝试添加具有相同 clientId 数组列表的新人员信息时,应该跳过它。除了clientId之外,其他属性是否相同都没有关系。我试图在不循环 Arraylist 的情况下进行检查。我需要更多更好的方法。我尝试使用 Set,但 Set 检查整个对象。任何帮助表示赞赏。

public class Person {

private String clientId;
private Integer age;
private String name;

public Person() {
}


public Person(String clientId, Integer age, String name) {
this.clientId = clientId;
this.age = age;
this.name = name;
}



public String getClientId() {
return clientId;
}

public void setClientId(String clientId) {
this.clientId = clientId;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public String getName() {
return name;
}

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

}

public class ManagePeople {


public static void main(String[] args) {

ArrayList<Person> perArrayList = new ArrayList<Person>();

Person person;
perArrayList.add(new Person("12", 100, "Tom"));
perArrayList.add(new Person("14", 124, "Harold"));
perArrayList.add(new Person("13", 234, "Petty"));
perArrayList.add(new Person("15", 244, "Pedro"));
perArrayList.add(new Person("16", 125, "Harry"));

}

}

最佳答案

您需要按照以下步骤操作:

  • 覆盖 equals()方法(您还应该覆盖 hashCode()equals() )在 Person 中返回 trueclientId是同样的。
    class Person {
    private String clientId;
    // Other attributes
    // Constructor(s), getters, setters and other methods

    @Override
    public int hashCode() {
    return Objects.hash(clientId);
    }

    @Override
    public boolean equals(Object obj) {
    Person other = (Person) obj;
    return this.clientId.equals(other.clientId);
    }
    }
  • 使用 Set而不是 ArrayList .在向集合中添加记录时,集合将自动丢弃重复记录(与集合中现有记录之一具有相同的 clientId)。
    Set<Person> personSet = new HashSet<Person>();
    personSet.add(new Person("12", 100, "Tom"));
    personSet.add(new Person("14", 124, "Harold"));
    personSet.add(new Person("13", 234, "Petty"));
    personSet.add(new Person("15", 244, "Pedro"));
    personSet.add(new Person("16", 125, "Harry"));
    personSet.add(new Person("16", 130, "Henry"));

    记录new Person("16", 130, "Henry")会自动丢弃
    因为它有相同的 clientId作为现有记录之一。你可以
    通过打印 personSet 进行验证.

  • 进一步阅读: Why do I need to override the equals and hashCode methods in Java?

    关于java - 如何避免在 Java 中将重复数据添加到类 Arraylist 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61864042/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com