判断序列中是否包含某些元素:
List与Set集合判断的方法都是从Conllection接口继承的contains方法
ListJudgeDemo(List判断演示):
contains方法底层调用的是每个元素的equals方法,若有一个返回true则contains方法返回true
所以使用contains方法需重写储存的元素对象的equals方法
1 import java.util.*; 2 class ListJudgeDemo//List判断演示 3 { 4 public static void main(String[] args) 5 { 6 List<courses> list = new ArrayList<courses>(); 7 8 addAll(list); 9 10 //contains方法比较一个 11 boolean b = list.contains(new courses("1","首席技术官")); 12 System.out.println(b); 13 //containsAll方法多个 14 courses[] cc = {new courses("1","首席技术官"),new courses("2","技术总监"), 15 new courses("3","首席架构师")}; 16 boolean b1 = list.containsAll(Arrays.asList(cc)); 17 System.out.println(b1); 18 } 19 public static void addAll(List<courses> list) 20 { 21 courses[] c = {new courses("1","首席技术官"),new courses("2","技术总监"), 22 new courses("3","首席架构师")}; 23 list.addAll(Arrays.asList(c)); 24 } 25 26 27 } 28 class courses 29 { 30 String name; 31 String id; 32 courses(String id, String name) 33 { 34 this.id = id; 35 this.name = name; 36 } 37 //重写equals方法的模板 38 public boolean equals(Object obj) 39 { 40 if(this==obj)//若当前对象等于参数obj,返回true 41 return true; 42 if(obj==null)//若参数等于null,返回false 43 return false; 44 if(!(obj instanceof courses))//若obj不等于courses,返回false 45 return false; 46 47 //若以上编译都通过则说明当前obj是一个courses类型对象且不为null 48 courses c = (courses)obj; 49 //通过其name属性来对比 50 if(this.name==null) 51 { 52 if(c.name==null) 53 return true; 54 else 55 return false; 56 } 57 else 58 { 59 //比较其名称不为null的情况下名称是否相等 60 if(this.name.equals(c.name)) 61 return true; 62 else 63 return false; 64 } 65 } 66 }
SetJudgeDemo(Set判断演示):
当调用HashSet的contains方法时其实是先调用每一个元素的HashCode方法返回哈希码,哈希码相等再调用它的equals方法判断,只有两个方法都返回true才认定包含某个元素
所以需要重写Set集合中对象类的HashCode方法和equals方法,
PS:eclipse中有生成equals与HashCode方法的模板,但是切记莫要过度依赖IDE工具
时间: 2024-10-25 03:35:13