Use the List.contains(Object object) method to determine whether the ArrayList contains an element object (for the case where the object's attribute value is the same but the object address is different), if the element object Object of List
@Override public boolean equals(Object o) { // TODO Auto-generated method stub return super.equals(o); }
will cause the contains method to always return false.
View the source code of the contains method of ArrayList as follows:
/** * Searches this {@code ArrayList} for the specified object. * * @param object * the object to search for. * @return {@code true} if {@code object} is an element of this * {@code ArrayList}, {@code false} otherwise */ @Override public boolean contains(Object object) { Object[] a = array; int s = size; if (object != null) { for (int i = 0; i < s; i++) { if (object.equals(a[i])) { return true; } } } else { for (int i = 0; i < s; i++) { if (a[i] == null) { return true; } } } return false; }
It can be seen that the contains method determines whether a certain element is included based on the equals method of Object. Continue to check the equals method in the Object class. The source code is as follows:
public boolean equals(Object o) { return this == o; }
So, use "==" to compare the addresses of objects. If it is the same object, that is, the address is the same, true will be returned. For different objects with the same object attribute value but different addresses , always returns false!
If you need to determine whether the ArrayList contains an object based on whether the object attribute values are the same, you need to override the equals method of Object and compare each attribute value of the object one by one in the equals method, such as:
package com.feng.lejuan.entity; public class QuestionInfo { private String questionId; private String answerId; private String subQuestionId; private String result; public QuestionInfo() { super(); } public QuestionInfo(String questionId, String answerId, String subQuestionId, String result) { super(); this.questionId = questionId; this.answerId = answerId; this.subQuestionId = subQuestionId; this.result = result; } public String getQuestionId() { return questionId; } public void setQuestionId(String questionId) { this.questionId = questionId; } public String getAnswerId() { return answerId; } public void setAnswerId(String answerId) { this.answerId = answerId; } public String getSubQuestionId() { return subQuestionId; } public void setSubQuestionId(String subQuestionId) { this.subQuestionId = subQuestionId; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } @Override public boolean equals(Object o) { if (o instanceof QuestionInfo) { QuestionInfo question = (QuestionInfo) o; return this.questionId.equals(question.questionId) && this.subQuestionId.equals(question.subQuestionId) && this.answerId.equals(question.answerId) && this.result.equals(question.result); } return super.equals(o); } @Override public String toString() { return "QuestionInfo [questionId=" + questionId + ", answerId=" + answerId + ", subQuestionId=" + subQuestionId + ", result=" + result + "]"; } }
The above is the detailed content of How to use the List.contains(Object object) method in Java. For more information, please follow other related articles on the PHP Chinese website!