注意:使用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自动生成

最新文章

  1. MFC 自绘按钮 消息响应
  2. Spring回调方法DisposableBean接口
  3. vim - multiple windows
  4. WPF Caliburn.Micro ListView 批量删除 新方法.高效的
  5. Mininet实验 OpenFlow1.3协议基于Mininet部署与验证
  6. iOS数据库之查找功能的实现
  7. 添加“返回顶部”小图标按钮的JS(JavaScript)代码详解
  8. dropDownList之&quot;请选择&quot;,同时设置默认选项
  9. docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
  10. ResultSet取结果集多少条记录方法及分页概要
  11. yaourt 之 Curl 错误
  12. iOS开发从申请账号到上线APP Store步骤
  13. Servlet与Jsp的结合使用实现信息管理系统一
  14. 【Tarjan缩点】POJ2186 Popular Cows
  15. master_pos_wait函数与MySQL主从切换
  16. 【java开发系列】—— 集合使用方法
  17. NetSNMP开源代码学习——小试牛刀
  18. 封装的head
  19. python(一)——初识与变量
  20. Instrumentation 功能介绍(javaagent)

热门文章

  1. 生成view的描述字段列表
  2. C++数组指针、指针数组、函数指针的核心概念
  3. Bokeh 0.9.0dev 发布,交互式可视化库
  4. 深入浅出RPC——浅出篇(转载)
  5. vista下开机启动 简单绕过UAC的方法(自己使用runas参数重新启动自己,有点意思)
  6. PHP调用语音合成接口
  7. 通过OSG实现对模型的日照模拟
  8. 3011C语言_基础知识
  9. Hive学习之路(一)—— Hive 简介及核心概念
  10. javaWeb 概念介绍