sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

ArrayList的contains方法(转)
https://www.shuzhiduo.com/A/x9J216pez6/

今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放User类的ArrayList  但在调用list.contains(user)时总是返回false。 去看了下ArrayList的源码,源码如下:

  1. public boolean contains(Object o) {
  2. return indexOf(o) >= 0;
  3. }
  4.  
  5. public int indexOf(Object o) {
  6. if (o == null) {
  7. for (int i = 0; i < size; i++)
  8. if (elementData[i]==null)
  9. return i;
  10. } else {
  11. for (int i = 0; i < size; i++)
  12. if (o.equals(elementData[i]))
  13. return i;
  14. }
  15. return -1;
  16. }
  1. public boolean contains(Object o) {
  2. return indexOf(o) >= 0;
  3. }
  4.  
  5. public int indexOf(Object o) {
  6. if (o == null) {
  7. for (int i = 0; i < size; i++)
  8. if (elementData[i]==null)
  9. return i;
  10. } else {
  11. for (int i = 0; i < size; i++)
  12. if (o.equals(elementData[i]))
  13. return i;
  14. }
  15. return -1;
  16. }

发现在contains方法会调用
o.equals(elementData[i])方法,其中elementData[i]是个object类的实例。也就是说我在调用
list.contains(user)时实际上比较的是user.equals(object) 这当然会返回false。

正确的方法,在User类中改写equals方法。 改写的代码如下:

  1. public boolean equals(Object obj) {
  2. if (obj instanceof User) {
  3. User u = (User) obj;
  4. return this.username.equals(u.username)
  5. && this.password.equals(password);
  6. }
  7. return super.equals(obj);
posted on 2023-03-23 19:38  sunny123456  阅读(26)  评论(0编辑  收藏  举报