因此,如果我有一个 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/