package com.imooc.collection;
import java.util.HashSet;
import java.util.Set;
/**
* 学生类
* @author 王阳
*
*/
public class Student {
public String id;
public String name;
public Set<Course> courses;
public Student(String id,String name) {
this.id = id;
this.name = name;
this.courses = new HashSet<Course>();
}
}
package com.imooc.collection;
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() {
// TODO Auto-generated constructor stub
coursesToSelect = new ArrayList<Course>();
}
public void testAdd() {
//创建一个课程对象,并通过调用add方法,添加到备选课程List中;
Course cr1 = new Course("1", "数据结构");
coursesToSelect.add(cr1);
// Course temp = (Course)coursesToSelect.get(0);
// System.out.println("添加了课程:"+temp.id+":"+temp.name);
Course cr2 = new Course("2", "c语言");
coursesToSelect.add(0, cr2);
// Course temp2 = (Course)coursesToSelect.get(0);
// // Course temp3 = (Course)coursesToSelect.get(1);
// System.out.println("添加了课程:"+temp2.id+":"+temp2.name);
// System.out.println("添加了课程:"+temp3.id+":"+temp3.name);
// coursesToSelect.add(cr1);
// Course temp0 = (Course)coursesToSelect.get(2);
// System.out.println("添加了课程:"+temp0.id+":"+temp0.name);
Course[] course = {new Course("3","操作系统"),new Course("4", "汇编语言")};
coursesToSelect.addAll(Arrays.asList(course));
// Course temp3 = (Course)coursesToSelect.get(3);
// Course temp4 = (Course)coursesToSelect.get(4);
// System.out.println("添加了两门课程:"+temp3.id+":"+temp3.name+";"+temp4.id+":"+temp4.name);
Course[] course2 = {new Course("5", "Java语言"),new Course("6", "离散数学")};
coursesToSelect.addAll(2,Arrays.asList(course2));
// Course temp5 = (Course)coursesToSelect.get(2);
// Course temp6 = (Course)coursesToSelect.get(3);
// System.out.println("添加了两门课程:"+temp5.id+":"+temp5.name+";"+temp6.id+":"+temp6.name);
}
/**
* 通过for each方法访问几何元素
* @param args
*/
public void testForEach() {
System.out.println("有如下课程待选(通过foreach方法):");
for(Object obj:coursesToSelect) {
Course cr = (Course)obj;
System.out.println("课程:"+cr.id+":"+cr.name);
}
}
public void testForEachSet(Student student) {
for(Course cr:student.courses) {
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 student = new Student("1","小明");
System.out.println("欢迎学生:"+student.name+"选课");
//创建一个Scanner对象,用来接收从键盘输入法人课程ID
Scanner console = new Scanner(System.in);
for(int i = 0; i<3; i ++) {
System.out.println("请输入课程ID");
String courseID = console.next();
for(Course cr:st.coursesToSelect) {
if(cr.id.equals(courseID)) {
student.courses.add(cr);
}
}
}
//打印输出学生所选的课程
st.testForEachSet(student);
}
}
楼上正解
建议先不要纠结这个问题,知道Set是无序即可,因为其内部实现原理是哈希表,需要数据结构的知识
我也是。。。
我也一样,程序运行输出顺序就是和输入顺序永远相同。
但是,用断点调试的时候输出的顺序就是无序的了!