Set中的元素不可以重复且没有顺序,我们通常称之为集。
Set 接口及其实现类-----HashSet(哈希集)
因为Set 是无序的并且不可以重复的所以 对于set 来说也就不可以进行修改,也就不存在使用get ()方法获取其中的元素,所以对于Set 来说,遍历一般采用的方法就死foreach循环迭代。
学生类:里面包含某一个学生的选课信息:
import java.util.HashSet;
import java.util.Set;
/**
* 学生类
* @author ge.zhang
*
*/
public class Student {
public String name;
public String id;
public Set<Course> crouse;
public Student(String id,String name){
this.name=name;
this.id=id;
this.crouse=new HashSet<Course>();
}
}
创建Courses待选课程,通过键盘输入ID 来向学生类的SET crouse 里面添加某一位学生所选的课程。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class SetTest {
public static List<Course> courses=new ArrayList<Course>();
public void AddCourse(){
Course crs[]={new Course("高等数学","1"),new Course("数据机构", "2"),new Course("C语言", "3"),new Course("大学英语", "4")};
courses.addAll(Arrays.asList(crs));
}
public void print(List<Course> co){
for(Course c1:co){
System.out.println(c1.id+":"+" "+c1.name);
}
}
public void printSet(Set<Course> co){
for(Course c1:co){
System.out.println(c1.id+":"+" "+c1.name);
}
}
public static void main(String[] args) {
SetTest st=new SetTest();
st.AddCourse();
st.print(courses);
Student student=new Student("1", "jack");
//循环接收学生选择的课程
System.out.println("欢迎学生"+student.name+"选课");
Scanner console=new Scanner(System.in);
for(int i=0;i<3;i++){
System.out.println("请输入课程名称:");
String ID=console.next();
for(Course c2:courses){
if(c2.id.equals(ID)){
student.crouse.add(c2);
}
}
}
st.printSet(student.crouse);
}
}
连续运行两次,会发现相同的输入却有不同的输出顺序,因为Set中的元素是无顺序的,对于
set中添加相同元素无论添加多少次都只保留第一个