两个集合一样返回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()方法判断一个对象是否包含在一个集合中
执行一下代码需要先实现以下功能:
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