这是我的“主要”代码:
ArrayList<Person> people = new ArrayList<Person>();
people.add(new Person("Aaron Morgan", 31));
people.add(new Person("Faye Palmer", 27));
people.add(new Person("Dexter Koh", 33));
people.add(new Person("Sallie Axl", 25));
if (people.contains(new Person("Adam Kelly", 48)))
{
System.out.print("MATCH FOUND");
}
else
{
System.out.print("MATCH NOT FOUND");
}
我正在尝试创建一个方法,将“Adam Kelly”与数组列表中的人员列表进行比较。我可以将“Adam Kelly”纳入方法中,但是我不确定我是如何在类/方法中对它进行比较的。
任何人都可以对此有所了解吗?
答案 0 :(得分:2)
在.equals()
课程中实施Person
:
@Override
public boolean equals(Object o) {
if(o == null) { return false; }
if(!(o instanceof Person)) { return false; }
Person person = (Person) o;
return this.name.equals(person.getName()) && this.age == person.getAge();
}
.contains()
方法将根据.equals()
表示查找现有值。引用类型的标准实现只是对象在内存中的地址位置。由于您有两个不同的对象,因此将返回不同的地址,因此无法找到它。
您需要做的是创建自己的实现,使用您想要的字段。
答案 1 :(得分:1)
Constains取决于Object的equals()实现。所以你需要为Person()编写一个相同的实现。无论哪种方式,list()列表都不是最优的并且具有O(n)运行时。使用基于Hash的集合,即Set()并确保Person具有有效的hashCode()和equals()实现要好得多。
答案 2 :(得分:1)
在您的People类中,您需要实现equals方法。
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person p = (Person) obj;
return ((this == obj) || (this.getName().equals(p.getName()) &&
this.getAge() == p.getAge()));
}
return false;
}
答案 3 :(得分:0)
必须编写自定义equals方法,在其中比较属性
equals(Object obj)
答案 4 :(得分:0)
基本上,您需要在Object类中使用Java的equals和hashcode来实现对象相等性。否则,它将使用仅使用==
运算符检查引用的Object类实现。
你班上的人类:
class Person {
// your fields and stuff
@Override
public boolean Equals(Object o) {
if (o == null) {
return false;
}
if (!(o instanceof Person)) {
return false;
}
Person that = (Person) o;
if(this.name != null){
return (this.name.equals(that.name)) && (this.age == that.age);
}
return false;
}
@Override
public int hashCode(){
// use a library here!
}
}
答案 5 :(得分:0)
有一种简单的方法可以做到这一点。 首先,您必须为ArrayList创建一个迭代器。
Iterator it = people.iterator();
然后探索所有元素并进行比较
while ( it.hasNext() ) {
Object obj = it.next();
Person person= (Person)obj;
if(person.getName().equals("Adam Kelly") && person.getAge().equals("43"))
{
System.out.print("MATCH FOUND");
}
else{
System.out.print("MATCH NOT FOUND");
}
}
希望这能解决你的问题。