试图使用.contains()Java方法

时间:2013-11-18 21:22:18

标签: java arraylist contains

这是我的“主要”代码:

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”纳入方法中,但是我不确定我是如何在类/方法中对它进行比较的。

任何人都可以对此有所了解吗?

6 个答案:

答案 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的equalshashcode来实现对象相等性。否则,它将使用仅使用==运算符检查引用的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");
  }
}
希望这能解决你的问题。