Java判断两个集合比较containsAll、Java集合判断对象相等contains

containsAll() :用于检测 arraylist 是否包含指定集合中的所有元素

两个集合一样返回true,不一样返回false
注意:有一种特殊情况3,重点理解,注意两个集合的使用前后顺序,避免业务中影藏bug

情况1:
public static void main(String[] args) {
	List<String> list1 = Arrays.asList("1","2","3");
	List<String> list2 = Arrays.asList("1","2","3");
	boolean result = list2.containsAll(list1);
	System.out.println(result);
}
执行结果:true
情况2:
public static void main(String[] args) {
	List<String> list1 = Arrays.asList("1","2","3");
	List<String> list2 = Arrays.asList("1","2");
	boolean result = list2.containsAll(list1);
	System.out.println(result);
}
执行结果:false

同样的两个集合,集合使用顺序不一样,结果不一样
由此可见,情况3中,内部实现方式是通过判断list1集合是否包含在list2中才会返回true
所以当两个集合调换使用顺序,如情况4,执行结果才会返回false

情况3:
public static void main(String[] args) {
	List<String> list1 = Arrays.asList("1","2");
	List<String> list2 = Arrays.asList("1","2","3");
	boolean result = list2.containsAll(list1);
	System.out.println(result);
}
执行结果:true

情况4:
public static void main(String[] args) {
	List<String> list1 = Arrays.asList("1","2");
	List<String> list2 = Arrays.asList("1","2","3");
	boolean result = list1.containsAll(list2);
	System.out.println(result);
}
执行结果:false

contains():方法用于判断字符串中是否包含指定的字符或字符串

这里重点说的是使用contains()方法判断一个对象是否包含在一个集合中

执行一下代码需要先实现以下功能:
1、创建实体类User
2、创建构造函数
3、重写equals方法
注意如果不重写equals方法,执行结果都是false

public class User {
	private Integer id;
	private String name;
	private String phone;
	
	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;
	}
	public String getPhone() {
	    return phone;
	}
	public void setPhone(String phone) {
	    this.phone = phone;
	}
	
	//构造函数
	public User(Integer id, String name, String phone) {
	    this.id = id;
	    this.name = name;
	    this.phone = phone;
	}
	
	//重写equals方法
	@Override
	public boolean equals(Object obj){
	    if(!(obj instanceof User)){
	        return false;
	    }
	    User temp = (User) obj;
	    //此处可根据业务需求进行调整字段
	    if(this.getId().equals(temp.getId()) && this.getName().equals(temp.getName()) && this.getPhone().compareTo(temp.getPhone())==0){
	        return true;
	    }
	    return false;
	}
}
public static void main(String[] args) {
	List<User> list1 = Arrays.asList(
	        new User(1, "张三1", "15810075811"),
	        new User(2, "李四", "15810075822"),
	        new User(3, "王五", "15810075833")
	);
	List<User> list2 = Arrays.asList(
	        new User(1, "张三", "15810075811"),
	        new User(2, "李四", "15810075822"),
	        new User(3, "王五", "15810075833")
	);
	list1.forEach(list->{
	    if(list2.contains(list)){
	        System.out.println("true");
	    }else{
	        System.out.println("false");
	    }
	});
}
执行结果:
false
true
true
上一篇:openwrt出现read only问题


下一篇:第二十六章 Centos7下Docker安装Mariadb