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

 

原因解析:

因為Set類型需要hashCode和equals同時相同才會為true;

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM