阿莫林西
2017-03-03 11:51
public void testPut(){ int i=0; Scanner reader = new Scanner(System.in); while(i<3){ System.out.print("请输入学生ID:"); String stuId = reader.next(); Student st = students.get(stuId); if(st==null){ System.out.print("请输入学生姓名:"); String stuName=reader.next(); students.put(stuId, new Student(stuId,stuName)); System.out.println("成功添加学生:"+students.get(stuId).name); i++; }else System.out.println("学生ID已被占用!"); } }
public void testKeySet(){ Set<String> stuIDs = students.keySet(); System.out.println("共有"+students.size()+"个学生"); for (String string : stuIDs) { Student st = students.get(string); System.out.println(st.id+":"+st.name); } }
研究了一段时间后发现所谓无序,并非是输出的结果每次会不一样,而是放进去之后没有顺序,
Map<String, Integer> m = new HashMap<>();
for(int i=0; i<10; i++) {
m.put("key"+i, i);
}
System.out.println(m);
这段代码就能看出来,放进去的时候是1-10,输出的却不是,但是输出的结果却是固定的,也就是说没有顺序但是执行结果缺一致,深入源码发现其通过放入的对象hashcode计算出其索引,然后放入,也就是说在这个时候顺序就固定了,另外从他的遍历方式能够看出来是链表方式,使用next节点连接下一个数值,所以虽说他是无序的,但执行结果缺是唯一的
你可以看看源码,计算机怎么去存一个无序的东西或者怎么去存一个有序的东西,答案是把数按添加顺序存进去,有序的的东西会有明确的地址引用,也就是相对于数组的角标。而无序只是把角标隐去了而已,再不打乱内部顺序的情况,是不会破坏内部的顺序。
你多试几次 看看
Java入门第三季
409792 学习 · 4340 问题
相似问题