`

List.contains(Object object)方法

阅读更多

  使用List.contains(Object object)方法判断ArrayList是否包含一个元素对象(针对于对象的属性值相同,但对象地址不同的情况),如果没有重写List<E>的元素对象Object中的equals方法,默认如下:

@Override
public boolean equals(Object o) {
	// TODO Auto-generated method stub
	return super.equals(o);
}

  将导致contains方法始终返回false。

  查看ArrayList的contains方法的源码如下:

/**
 * Searches this {@code ArrayList} for the specified object.
 *
 * @param object
 *            the object to search for.
 * @return {@code true} if {@code object} is an element of this
 *         {@code ArrayList}, {@code false} otherwise
 */
@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 QuestionInfo {
 
	private String questionId;
	
	private String answerId;
	
	private String subQuestionId;
	
	private String result;
 
	public QuestionInfo() {
		super();
		
	}
 
	public QuestionInfo(String questionId, String answerId,
			String subQuestionId, String result) {
		super();
		this.questionId = questionId;
		this.answerId = answerId;
		this.subQuestionId = subQuestionId;
		this.result = result;
	}
 
	public String getQuestionId() {
		return questionId;
	}
 
	public void setQuestionId(String questionId) {
		this.questionId = questionId;
	}
 
	public String getAnswerId() {
		return answerId;
	}
 
	public void setAnswerId(String answerId) {
		this.answerId = answerId;
	}
 
	public String getSubQuestionId() {
		return subQuestionId;
	}
 
	public void setSubQuestionId(String subQuestionId) {
		this.subQuestionId = subQuestionId;
	}
 
	public String getResult() {
		return result;
	}
 
	public void setResult(String result) {
		this.result = result;
	}
 
	@Override
	public boolean equals(Object o) {
		if (o instanceof QuestionInfo) {
			QuestionInfo question = (QuestionInfo) o;
			return this.questionId.equals(question.questionId)
					&& this.subQuestionId.equals(question.subQuestionId)
					&& this.answerId.equals(question.answerId)
					&& this.result.equals(question.result);
		}
		return super.equals(o);
	}
	
	@Override
	public String toString() {
		return "QuestionInfo [questionId=" + questionId + ", answerId="
				+ answerId + ", subQuestionId=" + subQuestionId + ", result="
				+ result + "]";
	}
}

 

PS:《浅谈Arrays.asList()方法的使用》一文有用到List.contains,有兴趣的可以阅读。

 

文章来源:https://blog.csdn.net/growing_tree/article/details/46622579

分享到:
评论

相关推荐

    C# list对象FindAll函数的四种写法

    在C#编程中,`List&lt;T&gt;` 是一个非常常用的集合类,它提供了丰富的操作方法,如查找、添加、删除等。在本篇文章中,我们将详细探讨`List&lt;T&gt;`的`FindAll`方法,并通过四种不同的写法来演示如何使用这个功能来筛选满足...

    list常用方法

    ### List常用方法详解 在Java编程语言中,`List`接口是集合框架的重要组成部分,它提供了有序元素集合的实现,并允许重复元素的存在。本文将详细解释`List`接口中的常用方法,帮助开发者更好地理解和运用这些功能...

    C# 有关List&lt;T&gt;的Contains与Equals方法.doc

    相等性是基于默认的 `Object.Equals()` 方法,或者是自定义的 `IEqualityComparer&lt;T&gt;` 实现。对于自定义类型,如果你希望使用特定的比较逻辑,确保覆盖 `Equals()` 和 `GetHashCode()` 方法。 `Equals()` 方法: `...

    JavaList.rar_javalist

    `List`接口还有许多其他方法,如`set(int index, E element)`用于替换元素,`clear()`用于清空列表,`subList(int fromIndex, int toIndex)`用于获取子列表等。理解并熟练运用这些方法,将使你在处理有序集合时更加...

    json的解析

    JSONArray jsonArray2 = JSONArray.fromObject( list ); System.out.println( jsonArray2 ); // prints ["first","second"] /*String生成json数组*/ JSONArray jsonArray3 = JSONArray.fromObject( "['...

    Java-Mail-list.zip_JAVA list通讯录

    它的主要方法包括add()(添加元素)、remove()(删除元素)、contains()(判断是否包含指定元素)和get()(获取指定位置的元素)等,这些方法在通讯录操作中都会用到。 4. **LinkedList类**:虽然在这个项目中可能...

    @Validated验证List集合的方法示例

    @Validated验证List集合的方法示例 在实际开发中,我们经常会遇到需要验证List集合的场景,而@Validated注解只能验证单个实体类,无法直接验证List集合。那么,如何实现List集合的验证呢?下面我们将通过示例代码,...

    java htmlparser

    && (((LinkTag) url_list.elementAt(i)).getLinkText().contains("下一页") == false)) { i++; } if ((i &lt; url_list.size()) && ((LinkTag) url_list.elementAt(i)).getLinkText().contains("下一页")) { // ...

    _Java-集合容器-2.List及其实现类.ppt

    3. List接口常用方法: - `add(E e)`:向列表末尾添加元素。 - `add(int index, E element)`:在指定位置插入元素。 - `addAll(Collection c)`:将整个集合添加到列表末尾。 - `addAll(int index, Collection c)`:...

    C#_List用法详解

    判断某个元素是否在该List中:List.Contains(T item)返回true或false,很实用,例如:if (mList.Contains("Hunter")) { Console.WriteLine("There is Hunter in the list"); } else { mList.Add("Hunter"); } List...

    C# List&lt;T&gt; Contains&lt;T&gt;()的用法小结

    相等性是通过默认的 `Object.Equals()` 方法或者自定义的 `IEqualityComparer&lt;T&gt;` 实现来判断的。 如果你正在处理的是基本数据类型(如 int、string 等),`Contains()` 方法会直接使用这些类型的默认相等比较规则...

    LIStinterface.zip

    6. `contains(Object o)`: 检查列表是否包含指定对象。 7. `size()`: 返回列表中的元素数量。 8. `clear()`: 移除列表中的所有元素。 9. `addAll(Collection&lt;? extends E&gt; c)`: 在列表末尾添加另一个集合的所有元素...

    java中List的用法和实例详解

    7. `contains(Object o)`: 检查列表是否包含特定元素。 8. `indexOf(Object o)`: 返回指定元素的第一个出现的索引,如果不存在则返回-1。 9. `lastIndexOf(Object o)`: 返回指定元素的最后一个出现的索引,如果不...

    JAVA中List的增删改查

    - `remove(Object o)` 方法:根据对象引用移除第一个匹配的元素,如 `list.remove(new Integer(5))`,这会删除值为5的Integer对象。 3. **修改元素(Update/Replace)** - `set(index, element)` 方法:替换指定...

    浅谈Java中的Set、List、Map的区别.docx

    4. boolean contains(Object o):判断集合中是否持有特定对象的引用 5. Iterator iterator():返回一个 Iterator 对象,可以用来遍历集合中的元素 6. boolean remove(Object o):从集合中删除一个对象的引用 7. int ...

    java.util.List接口的类及用法

    8. `contains(Object o)`: 检查列表是否包含指定元素。 9. `size()`: 返回列表中的元素数量。 10. `clear()`: 移除列表中的所有元素。 11. `isEmpty()`: 检查列表是否为空。 12. `toArray()`: 将列表转换为数组。 `...

    java中ArrayList的用法

    可以使用`Collections.synchronizedList(List&lt;T&gt; list)`方法来包装一个线程安全的列表。此外,在多线程环境中,也可以通过显式锁定来实现同步: ```java ArrayList&lt;Integer&gt; list = Collections.synchronizedList...

    简述Java List去重五种方法

    newList2.contains(integer)) { newList2.add(integer); } } System.out.println("去重后新集合为:" + newList2); } ``` 方法五:Set和List结合 我们可以使用Set和List结合的方式来实现List去重。我们可以将...

    arraylist使用方法

    - 示例:`boolean hasDog = animallist.contains(new AnimalActor("Dog", "Pet"));` 8. `clear()`: 移除ArrayList中的所有元素。 9. `addAll(Collection&lt;? extends E&gt; c)`: 将指定集合中的所有元素添加到...

Global site tag (gtag.js) - Google Analytics