ArrayList的contains方法(转)
https://www.shuzhiduo.com/A/x9J216pez6/
- public boolean contains(Object o) {
- return indexOf(o) >= 0;
- }
- public int indexOf(Object o) {
- if (o == null) {
- for (int i = 0; i < size; i++)
- if (elementData[i]==null)
- return i;
- } else {
- for (int i = 0; i < size; i++)
- if (o.equals(elementData[i]))
- return i;
- }
- return -1;
- }
- public boolean contains(Object o) {
- return indexOf(o) >= 0;
- }
- public int indexOf(Object o) {
- if (o == null) {
- for (int i = 0; i < size; i++)
- if (elementData[i]==null)
- return i;
- } else {
- for (int i = 0; i < size; i++)
- if (o.equals(elementData[i]))
- return i;
- }
- return -1;
- }
发现在contains方法会调用
o.equals(elementData[i])方法,其中elementData[i]是个object类的实例。也就是说我在调用
list.contains(user)时实际上比较的是user.equals(object) 这当然会返回false。
正确的方法,在User类中改写equals方法。 改写的代码如下:
标签:object,return,int,contains,equals,elementData,user From: https://www.cnblogs.com/sunny3158/p/17248651.html
- public boolean equals(Object obj) {
- if (obj instanceof User) {
- User u = (User) obj;
- return this.username.equals(u.username)
- && this.password.equals(password);
- }
- return super.equals(obj);