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 }
输入:

添加了课程:1-语文 添加了课程:2-数学 添加了课程:3-英语 添加了两门课程:5-化学;6-生物 添加了两门课程:7-地理;8-历史 目前共有课程如下: 当前课程为:3-英语 当前课程为:1-语文 当前课程为:2-数学 当前课程为:4-物理 当前课程为:7-地理 当前课程为:8-历史 当前课程为:5-化学 当前课程为:6-生物 学生张三开始选课: 4 选课程物理成功 7 选课程地理成功 8 选课程历史成功 学生张三共选了3门课程,如下: 4-物理 7-地理 8-历史 看下学生张三是否选了下面输入的课程: 请输入课程: 英语 看下学生张三是否选了下面输入的课程:false 看下学生张三是否选了下面输入的课程: 请输入课程: 物理 看下学生张三是否选了下面输入的课程:true
其中的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 }

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 }
Course类中的hashCode和equals需要重写,否则会输出false,如下:
看下学生张三是否选了下面输入的课程:
请输入课程:
物理
看下学生张三是否选了下面输入的课程:false
原因解析:
因为Set类型需要hashCode和equals同时相同才会为true;
更深入的源码未看,待后期进一步挖掘了解。
分类:
JAVA基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具