Java中List.contains(Object?object)方法使用
使用List.contains(Object object)方法判斷ArrayList是否包含一個(gè)元素對(duì)象(針對(duì)于對(duì)象的屬性值相同,但對(duì)象地址不同的情況),如果沒(méi)有重寫(xiě)List<E>的元素對(duì)象Object中的equals方法,默認(rèn)如下:
@Override public boolean equals(Object o) { // TODO Auto-generated method stub return super.equals(o); }
將導(dǎ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方法來(lái)判斷是否包含某一元素,繼續(xù)查看Object類(lèi)中的equals方法,源碼如下:
public boolean equals(Object o) { return this == o; }
所以,使用“==”比較對(duì)象的地址,如果是同一對(duì)象即地址相同的情況下,才會(huì)返回true,而對(duì)于對(duì)象屬性值相同但地址不同的不同對(duì)象,始終返回false!
如果需要依據(jù)對(duì)象屬性值是否相同來(lái)判斷ArrayList是否包含某一對(duì)象,則需要重寫(xiě)Object的equals方法,并在equals方法中一一比較對(duì)象的每個(gè)屬性值,如:
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 + "]"; ?? ?} }
到此這篇關(guān)于Java中List.contains(Object object)方法的文章就介紹到這了,更多相關(guān)Java List.contains(Object object)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java對(duì)list<Object>進(jìn)行手動(dòng)分頁(yè)實(shí)現(xiàn)
- java8 List<Object>去掉重復(fù)對(duì)象的幾種方法
- Java中Object轉(zhuǎn)換為L(zhǎng)ist類(lèi)型的實(shí)現(xiàn)方法
- 詳解Java中String JSONObject JSONArray List<實(shí)體類(lèi)>轉(zhuǎn)換
- Java List Object[]轉(zhuǎn)換成List T的實(shí)例
- Java Mybatis foreach嵌套foreach List<list<Object>>問(wèn)題
相關(guān)文章
關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼
今天小編就為大家分享一篇關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05使用Springboot整合GridFS實(shí)現(xiàn)文件操作
這篇文章主要介紹了使用Springboot整合GridFS實(shí)現(xiàn)文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10一文帶你掌握J(rèn)ava?SPI的原理和實(shí)踐
在Java中,我們經(jīng)常會(huì)提到面向接口編程,這樣減少了模塊之間的耦合,更加靈活,Java?SPI?(Service?Provider?Interface)就提供了這樣的機(jī)制,本文就來(lái)講講它的原理與具體使用吧2023-05-05Java?Request獲取請(qǐng)求頭數(shù)據(jù)實(shí)例詳解
在開(kāi)發(fā)中我們經(jīng)常需要獲取用戶(hù)IP地址,通過(guò)地址來(lái)實(shí)現(xiàn)一些功能,下面這篇文章主要給大家介紹了關(guān)于Java中Request獲取請(qǐng)求頭數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2024-01-01Java詳細(xì)講解Math和Random類(lèi)中有哪些常用方法
Math類(lèi)位于java.lang包中,包含很多用于科學(xué)計(jì)算的類(lèi)方法,這些方法可以直接通過(guò)類(lèi)名調(diào)用。Random類(lèi)獲取隨機(jī)數(shù),位于java.util包中,本篇帶你了解它們的常用方法2022-05-05java中 String和StringBuffer的區(qū)別實(shí)例詳解
這篇文章主要介紹了java中 String和StringBuffer的區(qū)別實(shí)例詳解的相關(guān)資料,一個(gè)小的例子,來(lái)測(cè)試String和StringBuffer在時(shí)間和空間使用上的差別,需要的朋友可以參考下2017-04-04