Java中List.contains(Object?object)方法使用
使用List.contains(Object object)方法判斷ArrayList是否包含一個元素對象(針對于對象的屬性值相同,但對象地址不同的情況),如果沒有重寫List<E>的元素對象Object中的equals方法,默認如下:
@Override public boolean equals(Object o) { // TODO Auto-generated method stub return super.equals(o); }
將導致contains方法始終返回false。
查看ArrayList的contains方法的源碼如下:
/** * 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; }
可以看出,contains方法依據(jù)Object的equals方法來判斷是否包含某一元素,繼續(xù)查看Object類中的equals方法,源碼如下:
public boolean equals(Object o) { return this == o; }
所以,使用“==”比較對象的地址,如果是同一對象即地址相同的情況下,才會返回true,而對于對象屬性值相同但地址不同的不同對象,始終返回false!
如果需要依據(jù)對象屬性值是否相同來判斷ArrayList是否包含某一對象,則需要重寫Object的equals方法,并在equals方法中一一比較對象的每個屬性值,如:
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 + "]"; ?? ?} }
到此這篇關于Java中List.contains(Object object)方法的文章就介紹到這了,更多相關Java List.contains(Object object)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Springboot整合GridFS實現(xiàn)文件操作
這篇文章主要介紹了使用Springboot整合GridFS實現(xiàn)文件操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java?Request獲取請求頭數(shù)據(jù)實例詳解
在開發(fā)中我們經(jīng)常需要獲取用戶IP地址,通過地址來實現(xiàn)一些功能,下面這篇文章主要給大家介紹了關于Java中Request獲取請求頭數(shù)據(jù)的相關資料,需要的朋友可以參考下2024-01-01java中 String和StringBuffer的區(qū)別實例詳解
這篇文章主要介紹了java中 String和StringBuffer的區(qū)別實例詳解的相關資料,一個小的例子,來測試String和StringBuffer在時間和空間使用上的差別,需要的朋友可以參考下2017-04-04