为了账号安全,请及时绑定邮箱和手机立即绑定

关于set无序的问题,求助大佬

https://img1.sycdn.imooc.com//5bf172e000018d8109210917.jpg如图,为什么我每次输入的顺序都是一样的呢?不是说Set集合是无序的吗? 求助!谢谢

正在回答

2 回答

package Test;

import java.util.*;

public class SetTest {

    // 创建一个List类型带有Course泛型的coursesToSelect属性
    public List<Course> coursesToSelect;

    //创建一个构造器
    public SetTest() {
        //初始化coursesToSelect的属性
        coursesToSelect = new ArrayList<Course>();
    }

    /*
     * 用于往coursesToSelect中添加备选课程
     */
    public void testAdd() {
        // 创建一个课程对象,并通过调用add方法,添加到备选课程List中
        Course cr1 = new Course("1", "数据结构");
        coursesToSelect.add(cr1);
        Course temp = (Course) coursesToSelect.get(0);

        Course cr2 = new Course("2", "C语言");
        coursesToSelect.add(0, cr2);
        Course temp2 = (Course) coursesToSelect.get(0);

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


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

    }

    public void testForEach() {
        System.out.println("有如下课程待选(通过for each访问):");
        for (Object obj : coursesToSelect) {
            Course cr = (Course) obj;
            System.out.println("课程:" + cr.getId() + ":" + cr.getName());
        }
    }

    public static void main(String[] args) {
        SetTest st = new SetTest();
        st.testAdd();
        st.testForEach();
        // 创建一个学生对象
        Student student = new Student("1", "小明");
        System.out.println("欢迎学生:" + student.getName() + "选课!");
        // 创建一个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.getId().equals(courseId)) {//判断键盘上输入的和课程上的ID是否对应
                    student.getCourses().add(cr); // 如果对应则添加
                    /**
                     * Set中,添加某个对象,无论添加多少次, 最终只会保留一个该对象(的引用), 并且,保留的是第一次添加的那一个
                     */
                    // student.courses.add(null);
                    student.getCourses().add(cr);
                }
            }
        }
        st.testForEachForSet(student);
    }

    public void testForEachForSet(Student student) { // 将Student类型的student作为参数传递进该方法
        // 打印输出,学生所选的课程!
        System.out.println("共选择了:" + student.getCourses().size() + "门课程!");
//        Set<Course> set = student.getCourses();
        for (Course cr : student.getCourses()) { //Courses需要加泛型,不然报错,或者像上面代码那样
            //set中的元素输出的是无序的并不可重复的
            System.out.println("选择了课程:" + cr.getId() + ":" + cr.getName());
        }
    }
}

你可以参考下

0 回复 有任何疑惑可以回复我~
#1

慕姐4925769

我写的都是私有的 新学者写代码最好养成良好的习惯
2018-11-21 回复 有任何疑惑可以回复我~

是无序的,有序set可以参照SortedSet


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于set无序的问题,求助大佬

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信