1

我有一个ArrayList定义如下:

ArrayList<Doctor> arr = new ArrayList<Doctor>();

该类Doctor包含以下内容:

String name;
String gender;
String speciality;

arr数组列表中,我添加了 100 个 Doctor 对象。

现在我需要搜索arrArrayList 以查看是否存在特定的医生对象。

我尝试了以下方法;

布尔包含 = maarrp.containsKey(doc.name);

但是,我不想比较对象的使用或keys对象。相反,我想比较整个对象。我怎样才能做到这一点?elementDoctordoctor

4

4 回答 4

1

医生类中的覆盖equals()和方法hashcode()

/*add a unique id field in doctor class to make each doctor unique.*/
String docUniqueId; 
String name;
String gender;
String speciality;

@Override
public boolean equals(Object ob) {
    if (!ob instanceof Doctor ) return false;
    Doctor that = (Doctor )ob;
    return this.docUniqueId== that.docUniqueId;
}

@Override
public int hashCode() {
    return docUniqueId;
}
于 2013-10-29T16:11:22.983 回答
1

类中的重写equals()hashcode()方法Doctor

你的班级应该是这样的:

class Doctor
{
  String name;
  String gender;
  String speciality;

public boolean equals()
{
  //some logic on which you want to say 
  //two doctors are same.
  return true;
}

 public int hashCode()
 {
   return 0;
 }
}

对于 hashCode,您必须遵循以下规则:

每当在 Java 应用程序执行期间对同一个对象多次调用它时,hashCode 方法必须始终返回相同的整数,前提是没有修改对象上的 equals 比较中使用的信息。该整数不需要从应用程序的一次执行到同一应用程序的另一次执行保持一致。如果两个对象根据 equals(Object) 方法相等,则对两个对象中的每一个调用 hashCode 方法必须产生相同的整数结果。如果根据 equals(java.lang.Object) 方法,如果两个对象不相等,则不需要对两个对象中的每一个调用 hashCode 方法都必须产生不同的整数结果。然而,

注意:hashCode 不能总是返回 0 :)

于 2013-10-29T16:00:19.187 回答
1

您需要在 Doctor Object 中实现equals()和方法,然后像下面这样针对 ArrayList 进行搜索。hashcode()

ArrayList<Doctor> arr = new ArrayList<Doctor>();

arr.add(new Doctor());
arr.add(new Doctor());
arr.add(new Doctor());
arr.add(new Doctor());

if(arr.contains(doc){

}

像下面这样创建你的医生类

class Doctor{

        Long id;

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((id == null) ? 0 : id.hashCode());
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Doctor other = (Doctor) obj;
            if (id == null) {
                if (other.id != null)
                    return false;
            } else if (!id.equals(other.id))
                return false;
            return true;
        }

}
于 2013-10-29T16:05:37.397 回答
0

您可以实现 Doctor 类的 equals() 和 hashcode() 方法。这些方法在调用 ArrayList 对象的 contains() 方法时被调用。

为了简化这项工作,您最终可以使用 commons-lang 库,它提供:

EqualsBuilder ( http://commons.apache.org/proper/commons-lang/apidocs/index.html?org/apache/commons/lang3/builder/ToStringBuilder.html )

和 HashCodeBuilder ( http://commons.apache.org/proper/commons-lang/apidocs/index.html?org/apache/commons/lang3/builder/HashCodeBuilder.html )

于 2013-10-29T16:05:49.080 回答