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

时间:2014-12-30 13:02:43

标签: java arraylist

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

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;
    }
}

然后在另一个成员资格类中,我有一个名为Members的arrayList。我知道如何通过以下方式添加Person:

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);
        }
    }
}

所以我这样做了,但是这个人永远不会被添加?我很困惑为什么?

2 个答案:

答案 0 :(得分:5)

需要来创建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()方法中实现逻辑。

答案 1 :(得分:0)

只需创建一个Person个实例,然后您就可以将其传递到现有的addMember方法中。

public void addMember(String name, int age, String dateOfBirth) {
    this.addMember(new Person(name, age, dateOfBirth);
}