list集合,set集合,map集合中的几个重要方法的详细解读

1、list集合
①contains(Object o) 如果列表包含指定的元素,则返回 true。
②remove(Object o) 移除集合中第一次出现的指定元素,移除成功返回true,否则返回false。

分析源代码,可以发现传入的object对象是通过调用equals方法与集合内的元素进行比较我们可以总结为一个三目表达式  o==null ? e==null : o.equals(e)
1、如果o的值为null,则只有集合中存在null元素才会返回true
2、如果o为String类型的对象,则只有集合中存在满足o.equals(e)条件的元素e时才会返回true ,其实质是运行时类型相同的前提下比较两者字符串是否完全相同
3、如果o为基本数据类型包装类对象,则只有集合中存在满足o.equals(e)条件的元素e时才会返回true,其实质是在两者运行时类型相同的前提下比较两者的值是否相等
4、如果o为自定义类类型对象,则只有集合中存在满足o.equals(e)条件的元素e时才会返回true,其实质是在两者运行时类型相同且自定义类没有重写equals方法的前提下比较两者的地址是否相等,在重写equals方法前提下用equals方法来比较。

2 、set集合
①add(Object o):向Set集合中添加元素,不允许添加重复数据。当且仅当Set集合中没有包含满足(o==null ? e==null : o.equals(e))条件的元素e时才能将元素o添加到集合中。
②remove(Object o) : 删除Set集合中的obj对象,删除成功返回true,否则返回false。当且仅当Set集合中包含满足(o==null ? e==null : o.equals(e))条件的元素e时才能返回true。
③contains(Object o):判断集合中是否包含obj元素。当且仅当Set集合中包含满足(o==null ? e==null : o.equals(e))条件的元素e时才返回true。

由于源代码过于复杂,我们截取出其中一个重要的判断条件。
set集合之中不能放相同的数据
set集合中相同的定义 1、hashcode相同
                                   2、地址相同或equals返回true
简单概括为   hashcode && (key||equals)
使用HashSet存储自定义类对象时,可以在自定义类中重写equals和hashCode方法避免“真实”对象被多次存入,主要原因是集合内不允许有重复的数据元素,在集合校验元素的有效性时(数据元素不可重复),需要调用equals和hashCode验证。
例如:

import java.util.HashSet;
import java.util.Set;

public class Add {

	public static void main(String[] args) {		
		Set<Object> students = new HashSet<Object>();	
		students.add(new Student("111"));
		System.out.println(students.contains(new Student("111")));
	}
}

此时若果不在Student类中重写equals方法和hashCode方法 结果为false。
 

public class Student {

	public String id;
	
	public Student(String id) {
		this.id=id;
	}
	
	@Override
	public int hashCode() {
		return this.id.hashCode();
	}

	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Student) {
			return this.id.equals(((Student)obj).id);
		}
		return false;
	}	
}

实际应用中,id相同就可视为相同,所以我们以id为判断依据 对hashCode和equals方法进行重写
这样一来上面那段代码的结果就是true。

3、map集合
①remove(Object key) :删除Map集合中键为key的数据并返回其所对应value值。只有Map集合中包含满足(key==null ? k==null :key.equals(k)) 的键k的映射关系时才能移除该映射关系
②containsKey(Object key) :判断集合中是否包含指定键,包含返回 true,否则返回false 。当且仅当Map集合中含有满足 (key==null ? k==null : key.equals(k))的键k的映射关系时,才返回 true.
③containsValue(Object value) : 判断集合中是否包含指定值,包含返回 true,否则返回false。当且仅当Map集合中至少包含一个满足 (value==null ? v==null : value.equals(v)) 的值v的映射关系时才返回true
 
remove和containsKey 与set集合中的类似 可以参考上面

但是containsValue与前面两个不一样,是不比较hashCode的。

猜你喜欢

转载自blog.csdn.net/caiwenchuan008/article/details/81635332
今日推荐