集合元素的判断

判断序列中是否包含某些元素:

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 }
View Code

SetJudgeDemo(Set判断演示):

当调用HashSet的contains方法时其实是先调用每一个元素的HashCode方法返回哈希码,哈希码相等再调用它的equals方法判断,只有两个方法都返回true才认定包含某个元素

所以需要重写Set集合中对象类的HashCode方法和equals方法,

PS:eclipse中有生成equals与HashCode方法的模板,但是切记莫要过度依赖IDE工具

 

Map:

判断某个序列中某个元素的位置:indexOf、lastIndexOf

 1 import java.util.*;
 2 class containsKeyOrValue 
 3 {
 4     public static void main(String[] args) 
 5     {
 6         Map< String, student> map = new HashMap< String, student>();
 7         map.put("1",new student("1","首席技术官"));
 8         System.out.println(map.containsKey("1"));//判断学生映射表中是否包含指定的key值
 9         //map.containsValue(new student(null,"首席技术官"));//map的containsValue方法需重写序列中对应的对象的HashCode方法和equals方法
10     }
11 }
12 
13 
14 class student
15 {
16     String id;
17     String name;
18     student(String id, String name)
19     {
20         this.id = id;
21         this.name = name;
22     }
23 }
View Code

 

Conllections:

Contains也是java集合框架的成员,但提供了很多静态的方法,如对集合排序的sort方法

posted @ 2015-11-03 23:08  坚持坚持再坚持  阅读(521)  评论(0编辑  收藏  举报