仅供个人学习记录,侵删
同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;
更深入的源码未看,待后期进一步挖掘了解。