判斷List中是否含有某個實體bean


注意:使用List.contains(Object object)方法判斷ArrayList是否包含一個元素對象(針對於對象的屬性值相同,但對象地址不同的情況),如果沒有重寫List的元素對象Object中的equals方法,將導致contains方法始終返回false。 

查看ArrayList的contains方法的源碼如下:

@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方法依據Object的equals方法來判斷是否包含某一元素,繼續查看Object類中的equals方法,源碼如下:

public boolean equals(Object o) {  
    return this == o;  
}

所以,使用“==”比較對象的地址,如果是同一對象即地址相同的情況下,才會返回true,而對於對象屬性值相同但地址不同的不同對象,始終返回false!


如果需要依據對象屬性值是否相同來判斷ArrayList是否包含某一對象,則需要重寫Object的equals方法,並在equals方法中一一比較對象的每個屬性值,如:

public class Student {

    private Integer id;

    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object object) {
        
        if (this == object) {
            return true;
        }
        if (object instanceof Student) {
            Student student = (Student) object;
            return this.id.equals(student.id) 
                    && this.name.equals(student.name);
        }
        return super.equals(object);
    }
}

如果該類中某屬性是其它類對象,則還需進一步重寫該類的equals方法!!

 equals方法可通過eclipse中 shift+alt+s自動生成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM