輸出順序始終是根據(jù)id大小來排序的
package?com.demo.zhq; import?java.util.HashMap; import?java.util.Map; import?java.util.Map.Entry; import?java.util.Scanner; import?java.util.Set; public?class?MapTest?{ /** ?*?用來承裝學生的類型對象 ?*?@param?args ?*/ public?Map<String,?Student>students; private?Scanner?console; private?Scanner?b; private?Scanner?a; /** ?*?構(gòu)造器中初始化students屬性 ?*/ public?MapTest(){ this.students?=?new?HashMap<String,Student>(); } /** ?*?測試添加:輸入學生ID,判斷是否被占用 ?*?若未被占用,則輸入姓名,創(chuàng)建學生對象,并且添加到students中 ?*? ?*?@param?args ?*/ public?void?testPut(){ console?=?new?Scanner(System.in); int?i?=?0; while(i?<?3){ System.out.println("請輸入學生ID:"); String?ID?=?console.next(); //判斷該ID是否被占用 Student?st?=?students.get(ID); if?(st?==?null)?{ //提示輸入學生姓名 System.out.println("請輸入學生姓名:"); String?name?=?console.next(); //創(chuàng)建一個新的對象 Student?newStudent?=?new?Student(ID,?name); //通過調(diào)用stdents的put方法,添加?ID-學生映射 students.put(ID,?newStudent); System.out.println("成功添加學生:"+students.get(ID).name); i++; }else?{ System.out.println("該學生ID已被占用!"); continue;? } } } /** ?*?測試Map的keySet方法 ?*?@param?args ?*/ public?void?testKeySet(){ //通過keySet的方法,返回Map中的所有"鍵"的Set集合 Set<String>?keySet?=?students.keySet(); // //取得students的容量 // System.out.println("總共有:"+students.size()+"個學生!"); //遍歷keySet,取得每一個鍵,在調(diào)用get方法取得每個鍵對應(yīng)的value for(String?stuId?:?keySet){ Student?st?=?students.get(stuId); if?(st?!=?null)?{ System.out.println("學生:"+st.name); } } } /** ?*?測試Map的刪除映射 ?*?@param?args ?*/ public?void?testRemove()?{ b?=?new?Scanner(System.in); ?while?(true)?{ ?//提示輸入刪除學生的ID ?System.out.println("請輸入要刪除的學生ID:"); ?String?ID?=?b.next(); ?//判斷該ID是否有對應(yīng)的學生對象 ?Student?st?=?students.get(ID); ?if?(st?==?null)?{ //提示輸入的ID并不存在 ?System.out.println("該ID并不存在!"); ?continue; ?} ?students.remove(ID); ?System.out.println("成功刪除學生:"+st.name); ?break; } } /** ?*?通過entrySet方法來遍歷Map ?*? ?*?@param?args ?*/ public?void?testEntrySet(){ //通過entrySet方法,返回Map中的所有鍵值對 Set<Entry<String,Student>>?entrySet?=?students.entrySet(); System.out.println("刪除后還剩"+entrySet.size()+"名學生,分別是:"); for?(Entry<String,?Student>?entry?:?entrySet)?{ System.out.print("鍵值:"+entry.getKey()+","); System.out.println("姓名:"+entry.getValue().name); } } /** ?*?利用put方法修改Map中的已有映射 ?*?@param?args ?*/ public?void?testModify(){ //提示輸入要修改的學生ID System.out.println("請輸入要修改的學生ID:"); a?=?new?Scanner(System.in); while?(true)?{ //取得從鍵盤輸入的學生ID String?stuID?=?a.next(); //從students中查找該學生ID對應(yīng)的學生對象 Student?student?=?students.get(stuID); } } public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub MapTest?mt?=?new?MapTest(); mt.testPut(); mt.testKeySet(); mt.testRemove(); mt.testEntrySet(); } }
為什么我的輸出順序是根據(jù)輸入的id來的啊,每次都是一樣的1,2,3的順序,N次了
2017-08-13
只是湊巧,上面這個老哥已經(jīng)說很清楚了
2017-07-20
湊巧而已,多試幾次再看看,
HashMap是無序的,TreeMap是有序的