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);
????????}
????}
2017-03-07
研究了一段時間后發現所謂無序,并非是輸出的結果每次會不一樣,而是放進去之后沒有順序,
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節點連接下一個數值,所以雖說他是無序的,但執行結果缺是唯一的
2017-03-05
你可以看看源碼,計算機怎么去存一個無序的東西或者怎么去存一個有序的東西,答案是把數按添加順序存進去,有序的的東西會有明確的地址引用,也就是相對于數組的角標。而無序只是把角標隱去了而已,再不打亂內部順序的情況,是不會破壞內部的順序。
2017-03-03
你多試幾次 ?看看