您的位置:首页 > 大数据 > 人工智能

ArrayList的contains方法

2012-03-03 17:19 127 查看
今天在用ArrayList类的cantains方法时遇到了问题,我写了一个存放User类的ArrayList ,放入一个user对象, 但在调用list.contains(user1)时总是返回false(此处user1与user字段值完全相同)。 去看了下ArrayList的源码:

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: