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

为什么我每次输入的学生ID和姓名都是有顺序的,不是应该是是无序的吗?

public class MapTest {
    public Map<String ,Student> student;
    public MapTest(){
        this.student = new HashMap<String ,Student>();
    }
    public void testPut(){
        Scanner console = new Scanner(System.in);
        int i = 0;
        while(i<3){
            System.out.println("请输入学生ID");
            String ID = console.next();
            Student st = student.get(ID);
            if(st == null){
                System.out.println("请输入学生姓名");
                String name = console.next();
                Student newStudent = new Student(ID,name);
                student.put(ID,newStudent);
                System.out.println("成功添加学生:"+student.get(ID).name);
                i++;
            }else {
                System.out.println("该学生的ID已被占用");
                continue;
            }
        }
    }
    public void testKeySet(){
        //返回所有key的集合
        Set<String> keySet=student.keySet();
        for (String stuId:keySet) {
            Student st = student.get(stuId);
            if(st!=null){
                System.out.println("学生"+st.name);
            }
        }
    }
    public void testRemove(){
        System.out.println("请输入要删除的学生ID");
        Scanner console = new Scanner(System.in);
        while (true) {
            String ID = console.next();
            Student st = student.get(ID);
            if (st == null) {
                System.out.println("该ID不存在");
                continue;
            }
            student.remove(ID);
            System.out.println("成功删除学生:"+st.name);
            break;
        }
    }

    public void testEntrySet(){
       //返回所有键值对的集合
       Set<Map.Entry<String,Student>> entrySet = student.entrySet();
        for (Map.Entry<String,Student> entry:entrySet) {
            System.out.println("取得键为:"+entry.getKey());
            System.out.println("对应的值为:"+entry.getValue().name);
        }
    }

    public static void main(String[] args) {
        MapTest mt =new MapTest();

        mt.testPut();
        mt.testKeySet();
        mt.testRemove();
        mt.testEntrySet();
    }
}


正在回答

6 回答

我也一样,怀疑是JDK版本的问题

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

我引用下别人的话:在Java中无序指的是Java语言没有规定某个容器按什么顺序遍历,在不同的Java虚拟机上对某个容器的实现是不一样,比如说运行在Windows和Linux上的Java虚拟机对HashSet的遍历顺序可能不太一样,但对同一种虚拟机来说遍历输出都是一样的。而不是我们日常所理解的"无序就是乱序"的意思。


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

我也是这样的问题

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

那为什么我每次输出都是按照我输入的顺序来的呢

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

慕仰9267954

我感觉它是根据id大小来输出的
2019-11-21 回复 有任何疑惑可以回复我~

无序是指不按照插入顺序排序,具体是根据一种哈希算法来规定储存位置的,所以你每次按同样的顺序插入,取出来的顺序都是一定的

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

辰_宿

那为什么我每次输出都是按照我输入的顺序来的呢
2019-11-19 回复 有任何疑惑可以回复我~

你输入可以无序呀,你可以自己尝试一下呀,比如他214,你124呀

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

举报

0/150
提交
取消

为什么我每次输入的学生ID和姓名都是有顺序的,不是应该是是无序的吗?

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