前面我们介绍了List接口及其实现类ArrayList,接下来来说一下Collection接口的另一个重要也是常用的子接口Set及其实现类HashSet
2. Set接口及其实现类——HashSet
Set是元素无序并且不可重复的集合,被称为集
HashSet——哈希集,是Set的一个重要实现类
接下来的例子和前面差不多
先是创建一个学生类
import java.util.HashSet;
/*
* 创建一个学生类
*/
import java.util.Set;
public class Student {
public String id;
public String name;
/*
* 存放学生所选课程
*/
public Set<Course> course;//泛型
public Student(String id,String name){
this.id=id;
this.name=name;
this.course=new HashSet<Course>();
}
}
然后是课程类
/*
* 创建一个课程类
*/
public class Course {
public String id;
public String name;
public Course(){}
public Course(String id,String name){
this.id=id;
this.name=name;
}
}
接下来是测试类SetTest
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class SetTest {
public List<Course> coursesToSelect;
public SetTest(){
coursesToSelect = new ArrayList<Course>();
}
public void testAdd(){
Course cr1 =new Course("0","数据结构");
coursesToSelect.add(cr1);
Course cr2 =new Course("1","C语言");
coursesToSelect.add(cr2);
Course cr3 =new Course("2","Java");
coursesToSelect.add(cr3);
Course []courses={new Course("3","计算机组成"),new Course("4","编译原理")};
coursesToSelect.addAll(Arrays.asList(courses));
}
/**
* 用foreach遍历
*/
public void testForeach(){
System.out.println("有如下课程待选(通过foreach访问):");
for(Course cr:coursesToSelect){
System.out.println(cr.id+":"+cr.name);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SetTest st =new SetTest();
st.testAdd();
st.testForeach();
// 创建学生对象
Student student1 = new Student("001","小明");
System.out.println("欢迎学生:"+student1.name+"选课!");
// 创建一个Scanner对象,用来接收键盘输入的课程id
Scanner console = new Scanner(System.in);
for(int i=0;i<3;i++){
System.out.println("输入选择的课程ID:");
String courseID =console.next();
//判断是否是可选的课程,是的话则加入学生的课程Set集合
for(Course cr:st.coursesToSelect){
if(cr.id.equals(courseID)){
student1.course.add(cr);
}
}
}
// 打印输出
System.out.println("共选择了:"+student1.course.size()+"门课程");
for(Course cr:student1.course){
System.out.println("选择了课程:"+cr.id+":"+cr.name);
}
}
}