首页 > 其他分享 >ArrayList的contains方法(转) list.contains(user)时实际上比较的是user.equals(object)

ArrayList的contains方法(转) list.contains(user)时实际上比较的是user.equals(object)

时间:2023-03-23 19:44:24浏览次数:60  
标签:object return int contains equals elementData user

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);

标签:object,return,int,contains,equals,elementData,user
From: https://www.cnblogs.com/sunny3158/p/17248651.html

相关文章