JAVA中Set之contains

转自:https://www.imooc.com/video/3760/0

仅供个人学习记录,侵删

同List的contains一样,直接上代码:

  1 package com.collection;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import java.util.Arrays;
  6 import java.util.Scanner;
  7 import java.lang.String;
  8 
  9 public class SetTest {
 10 
 11     public List<Course> courseToList = new ArrayList<Course>();
 12 
 13     public Student s_zhang = new Student(1,"张三");
 14 
 15     public void addCourse(){
 16         //add方法
 17         Course c1 = new Course(1,"语文");
 18         courseToList.add(c1);
 19         Course temp1 = (Course) courseToList.get(0);
 20         System.out.println("添加了课程:"+temp1.id+"-"+temp1.name);
 21 
 22         Course c2 = new Course(2,"数学");
 23         courseToList.add(c2);
 24         Course temp3 = (Course) courseToList.get(1);
 25         System.out.println("添加了课程:"+temp3.id+"-"+temp3.name);
 26 
 27         Course c3 = new Course(3,"英语");
 28         courseToList.add(0,c3);
 29         Course temp4 = (Course) courseToList.get(0);
 30         System.out.println("添加了课程:"+temp4.id+"-"+temp4.name);
 31 
 32 
 33         courseToList.add(3,new Course(4,"物理"));
 34 
 35         //addAll方法
 36         Course[] c5 = {new Course(5,"化学"),new Course(6,"生物")};
 37         courseToList.addAll(Arrays.asList(c5));
 38         Course temp5 = (Course) courseToList.get(4);
 39         Course temp6 = (Course) courseToList.get(5);
 40         System.out.println("添加了两门课程:"+temp5.id+"-"+temp5.name+";"+temp6.id+"-"+temp6.name);
 41 
 42         Course[] c6 = {new Course(7,"地理"),new Course(8,"历史") };
 43         courseToList.addAll(4,Arrays.asList(c6));
 44         Course temp7 = (Course) courseToList.get(4);
 45         Course temp8 = (Course) courseToList.get(5);
 46         System.out.println("添加了两门课程:"+temp7.id+"-"+temp7.name+";"+temp8.id+"-"+temp8.name);
 47     }
 48     public void courseForEach(){
 49         System.out.println("");
 50         System.out.println("目前共有课程如下:");
 51         for(Course c : courseToList){
 52             System.out.println("当前课程为:"+c.id+"-"+c.name);
 53         }
 54     }
 55 
 56     /*
 57     * 让同学张三输入课程ID选课程,能选三门
 58     * */
 59     public void studentSelectCourse(){
 60         System.out.println("");
 61         System.out.println("学生"+s_zhang.name+"开始选课:");
 62 
 63         Scanner console = new Scanner(System.in);
 64         for(int i = 0;i < 3 ; i++){
 65             String id =  console.next();
 66             for(Course c : courseToList){
 67                 if(id.equals( String.valueOf(c.id))){
 68                     s_zhang.course.add(c);
 69                     /*
 70                     * set中添加某个对象无论添加多少次,
 71                     * 最终只会保留一个该对象(的引用),
 72                     * 并且,保留的是第一次添加的那个
 73                     * */
 74                     s_zhang.course.add(c);//set类型无法添加重复的数据
 75                     System.out.println("选课程"+c.name+"成功");
 76                 }
 77             }
 78         }
 79 
 80         System.out.println("学生"+s_zhang.name+"共选了"+s_zhang.course.size()+"门课程,如下:");
 81         for(Course c1:s_zhang.course){
 82             System.out.println(c1.id+"-"+c1.name);
 83         }
 84     }
 85 
 86     /*
 87     * 使用contains方法
 88     * */
 89     public void testContains(){
 90         System.out.println("");
 91         System.out.println("看下学生"+s_zhang.name+"是否选了下面输入的课程:");
 92         Scanner console = new Scanner(System.in);
 93         System.out.println("请输入课程:");
 94         String courseName = console.next();
 95         Course c = new Course();
 96         c.name = courseName;
 97         boolean result = s_zhang.course.contains(c);
 98         System.out.println("看下学生"+s_zhang.name+"是否选了下面输入的课程:"+result);
 99     }
100 
101     public static void main(String[] args){
102         SetTest st = new SetTest();
103         st.addCourse();
104         st.courseForEach();
105         st.studentSelectCourse();
106         st.testContains();
107     }
108 }
View Code

输入:

添加了课程:1-语文
添加了课程:2-数学
添加了课程:3-英语
添加了两门课程:5-化学;6-生物
添加了两门课程:7-地理;8-历史

目前共有课程如下:
当前课程为:3-英语
当前课程为:1-语文
当前课程为:2-数学
当前课程为:4-物理
当前课程为:7-地理
当前课程为:8-历史
当前课程为:5-化学
当前课程为:6-生物

学生张三开始选课:
4
选课程物理成功
7
选课程地理成功
8
选课程历史成功
学生张三共选了3门课程,如下:
4-物理
7-地理
8-历史

看下学生张三是否选了下面输入的课程:
请输入课程:
英语
看下学生张三是否选了下面输入的课程:false

看下学生张三是否选了下面输入的课程:
请输入课程:
物理
看下学生张三是否选了下面输入的课程:true
View Code

其中的Student类和Course类如下:

 1 package com.collection;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 public class Student {
 7     public int id;
 8     public String name;
 9 
10     //set中添加某个对象无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那个
11 
12     public Set<Course> course = new HashSet<Course>();
13 
14     public Student(int id, String name){
15         this.id = id;
16         this.name = name;
17     }
18 
19 }
View Code
 1 package com.collection;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 public class Course {
 7     public int id;
 8     public String name;
 9     public Set Course;
10 
11     public Course(int id,String name){
12         this.id = id;
13         this.name = name;
14         this.Course = new HashSet();
15     }
16     public Course(){
17 
18     }
19 
20 
21     /*
22     *
23     * */
24     public int hashCode(){
25         return 1;
26     }
27 
28     /*
29     * 重写equals方法
30     * 用来比较课程名称是否相同
31     * */
32     public boolean equals(Object obj){
33         if(this == obj){
34             return true;
35         }
36         if(obj == null){
37             return false;
38         }
39         if(!(obj instanceof Course)){
40             return false;
41         }
42         Course c = (Course) obj;
43         if(this.name == null){
44             if(c.name == null){
45                 return true;
46             }else{
47                 return false;
48             }
49         }else{
50             if(this.name.equals(c.name)){
51             //if(this.name==c.name){
52                 return true;
53             }else{
54                 return false;
55             }
56         }
57     }
58 }
View Code

Course类中的hashCode和equals需要重写,否则会输出false,如下:

看下学生张三是否选了下面输入的课程:
请输入课程:
物理
看下学生张三是否选了下面输入的课程:false

原因解析:

扫描二维码关注公众号,回复: 10826374 查看本文章

因为Set类型需要hashCode和equals同时相同才会为true;

更深入的源码未看,待后期进一步挖掘了解。

猜你喜欢

转载自www.cnblogs.com/chengshan/p/12707207.html