set部分,为什么照着老师的写,结果不一样

来源:4-11 学生选课---通过 Set 集合管理课程

goodY

2019-08-08 15:20

照着老师视频里写的,功能也都实现了,但是并没有每次运行程序输出顺序都不同,而是下图这样每次都是142

https://img.mukewang.com/5d4bcd1c0001372303140382.jpg

代码为

package com.imooc.collection;import java.util.Arrays;import java.util.Iterator;import java.util.List;import java.util.ArrayList;import java.util.Scanner;public class SetTest {	public List<Course> coursesToSelect;	public SetTest() {		this.coursesToSelect = new ArrayList<Course>();	}	public void testAdd() {		// 创建一个课程对象,并通过调用add方法,		// 添加到备选课程Lis中		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);//		System.out.println("添加了课程:" + temp2.id + " " + temp2.name);		// 以下两行代码会抛出数组越界异常//		Course cr3 = new Course("3","test");//		coursesToSelect.add(3,cr3);		Course[] course = { new Course("3", "离散数学"), new Course("4", "汇编语言") };		coursesToSelect.addAll(Arrays.asList(course));		Course temp3 = (Course) coursesToSelect.get(2);		Course temp4 = (Course) coursesToSelect.get(3);//		System.out.println("添加了两门课程:" + temp3.id + ":" + temp3.name//				+ ";" + temp4.id + ":" + temp4.name);		Course[] course2 = { new Course("5", "高等数学"), 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);//		coursesToSelect.add(new Course("1","数据结构"));	}	/**	* 通过迭代器来遍历List	* 	* @param args	*/	public void testIterator() {		// 通过集合的iterator方法,取得迭代器的实例		Iterator it = coursesToSelect.iterator();		System.out.println("有如下课程待选(通过迭代器访问)");		while (it.hasNext()) {			Course cr = (Course) it.next();			System.out.println("课程" + cr.id + ":" + cr.name);		}	}	/**	* 通过foreach来遍历List	* 	* @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 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);					/**					* Set中,添加某个对象,无论添加多少次					* 最终都只会保留一个该对象(的引用)					* 并且,保留的是第一次添加的那一个					* 还可以像以下这样添加null,但实际应用没什么意义					* student.courses.add(null);					*/					student.courses.add(cr);				}			}		}		st.testForEachForSet(student);	}	public void testForEachForSet(Student student) {		//打印输出,学生所选的课程		System.out.println("共选择了:" + student.courses.size() + "门课程");		for (Course cr : student.courses) {			System.out.println("选择了课程:" + cr.id + ":" + cr.name);		}	}}


写回答 关注

4回答

  • 凡人必有三舅妈
    2019-09-12 15:48:21

    java的jdk新的版本对原有的一些方法进行了改动。现在是一样的

  • 大鹏丶Lee
    2019-09-05 19:10:41

    同问,我输入123,输出都213不变的,什么情况

  • 慕粉7367658
    2019-08-22 20:47:03

    set集合是无序集合   没有固定顺序

    goodY

    我的问题是,每次都是一样的内容和顺序,但他每次的输出的顺序也是不变的,而在视频里,一样的214选课顺序,两次的输出顺序是不同的

    2019-08-23 11:52:44

    共 1 条回复 >

  • qq_慕粉2108861
    2019-08-09 15:14:50

    Set 是无序的,在输入后记录是无序,所以输出是也是无序的

    慕标3593... 回复goodY

    我也是这样。。。每次输入123,输出结果也不变顺序

    2019-08-10 17:18:48

    共 2 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题