ArrayList的contains方法
2012-03-03 17:19
127 查看
今天在用ArrayList类的cantains方法时遇到了问题,我写了一个存放User类的ArrayList ,放入一个user对象, 但在调用list.contains(user1)时总是返回false(此处user1与user字段值完全相同)。 去看了下ArrayList的源码:
解决方案,在User中重写equals方法,实现比较两个对象的字段相等的逻辑
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()方法传入的参数是null,则直接在list找有没有null元素,如果传入的参数不是null,则contains函数用调用equals方法,把传入的参数与list中每个元素做比较。此处Object的equals默认的是比较的是两个对象的地址。当然就不相等啦。
解决方案,在User中重写equals方法,实现比较两个对象的字段相等的逻辑
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);
相关文章推荐
- [Java基础]ArrayList的contains方法,你用对了吗?
- ArrayList的contains方法和HasMap的containsKey效率差十倍
- java 慎用ArrayList的contains方法,使用HashSet的contains方法代替
- 慎用ArrayList的contains方法,使用HashSet的contains方法代替
- ArrayList的contains方法(转)
- ArrayList中的contains方法学习笔记
- ArrayList和HashSet中contains方法的不同
- ArrayList的contains方法,底层调用了equals方法。
- (转载)ArrayList的contains方法
- ArrayList的contains方法
- 慎用ArrayList的contains方法,使用HashSet的contains方法代替
- ArrayList的contains方法[转]
- ArrayList和HashSet的Contains()方法(转)
- ArrayList的contains方法与Object的equals方法的关系
- java ArrayList的contains方法问题
- 用Arraylist的contains()方法去掉文件中的重复数据
- 慎用ArrayList的contains方法,使用HashSet的contains方法代替
- ArrayList的contains方法的效率果然不高
- 慎用ArrayList的contains方法,使用HashSet的contains方法代替
- [黑马程序员]集合_ArrayList的contains方法用的是equals