问答详情
源自:4-11 学生选课---通过 Set 集合管理课程

为什Set里的元素打印输出有有顺序

package com.imooc;


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() {

this.coursesToSelect = new ArrayList<Course>();

}

public void testAdd() {

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);

   

//    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(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);

   

}

 

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);

        }

        }

         }

         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);

        }

}


}

有如下课程待选(通过foreach访问):

课程:2:C语言

课程:1:数据结构

课程:5:高等数学

课程:6:大学语言

课程:3:离散数学

课程:4:汇编语言

欢迎学生:小明选课

请输入课程id

1

请输入课程id

2

请输入课程id

4

一共输出了几门课程:3

选择了课程:1:数据结构

选择了课程:2:C语言

选择了课程:4:汇编语言


提问者:慕粉1468924816 2017-08-25 10:27

个回答

  • 阿米巴丶
    2017-10-13 13:40:49

    我的也是有序的,不知道为啥

  • qq_让一切过去_0
    2017-08-25 11:23:27

    set里面的数据是无序的,在你打印输出过程中,有可能有序有可能无序,程序多执行几次,执行的结果就有可能不同.