java - 类的 ArrayList,无需先创建此类的实例

标签 java arraylist

因此,如果我有一个 Person 类,您可以在其中定义他们的姓名、年龄和出生日期。

public class Person
{
    private String name;
    private int age;
    private String dOB;

    public Person (String name, int age, String dateOfBirth)
    {
        this.name = name;
        this.age = age;
        dOB = dateOfBirth;
    }
}

然后在另一类 Memberships 中,我有一个名为 Members 的数组列表。我知道如何通过以下方式添加人员:

import java.util.ArrayList;

public class Memberships
{
    private ArrayList<Person> members;

    public Memberships()
    {
        members = new ArrayList<Person>();
    }

    public void addMember(Person person)
    {
        members.add(person);
    }
}

但是,如何在不单独创建 Person 实例的情况下添加成员。 所以从以下开始:

    public void addMember(String name, int age, String dOB)
    {
    }

这就是我陷入困境的地方,我不知道如何使用这些值来创建一个 Person 以添加到我的成员 ArrayList 中。

@dehlen 抱歉!

public void addNewMember(String name, int age, String dOB)
{
    Person p = new Person(name, age, dOB);

    for (Person pers : members)
    {
        if (pers.getName().equals(name))
        {
            System.out.print("This member is already included.");
        }
        else
        {
            members.add(p);
        }
    }
}

所以我这样做了,但是这个人从未被添加?我很困惑为什么?

最佳答案

需要创建一个 Person 实例,因为这是您的 ArrayList 所期望的。 以下是完成任务的方法:

public void addMember(String name, int age, String dOB)
{
    Person p = new Person(name,age,dOB);
    members.add(p);
}

为了确保不向 ArrayList 添加重复项,您可以迭代 ArrayList 并查看是否存在带有以下内容的 Person 对象:其中已有相同的值。

public void addMember(String name, int age, String dOB)
    {
    //Create a new Person instance with given parameters
    Person p = new Person(name,age,dOB);

    //Loop through existing Person instances in ArrayList
    for (Person pers : members){
        //If there exists a Person with the same name
        if (pers.getName().equals(name)) {
            //We can stop searching for a duplicate and leave the method
            return;
        }
    }
    //Since we did not exit the method above we did not found any duplicate, therefore it is safe to add our Person instance to our ArrayList
    members.add(p);
}

当然,这只是检查是否存在同名的 Person。但在这段代码的帮助下,您还可以完成检查更多属性。

我还使用了一种名为 getName() 的方法,该方法称为 getter。必须在您的 Person 模型类中指定此方法:

public String getName() {
   return name;
}

正如 @BorisTheSpider 正确指出的那样,有一种更好的方法来测试相等性。 您可以/应该重写模型类的equals()方法,如下所示:

@Override
public boolean equals(Object person)
{
    boolean same = false;

    if (person != null && person instanceof Person)
    {
        same = this.name == ((Person) person).name;
    }

    return same;
}

然后您可以使用 contains() 方法,如下所示:

members.contains(p);

要检查其他属性,您应该在重写的 equals() 方法中实现逻辑。

关于java - 类的 ArrayList,无需先创建此类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27706026/

相关文章:

java - 文件末尾的哨兵值?

java - Hibernate CriteriaBuilder 为以驼峰命名法编写的属性生成无效查询

java - GroupBy 字符串列表

java - 在 java android 中创建对象的 JSON 数组

java - ArrayList 调整当前底层数组的大小或创建一个新数组?

java - 将过滤器重新应用到过滤后的 JTable View

java - 线程池,worker既是生产者又是消费者

java - 如何在 Storm 中发射和收集数组列表?

java - 如何将多个 ArrayList 并排打印

java - 从数组列表中检索数据