輸入順序打亂,keySet出來的是有序的
輸入1,3,2出來的怎么是1,2,3
package?com.com.test.collection; import?java.sql.Struct; import?java.util.HashMap; import?java.util.Map; import?java.util.Scanner; import?java.util.Set; public?class?MapTest?{ ????/** ?????*?用來承裝學生類型對象 ?????*/ ????public?Map<String,Student>?students; ????/** ?????*?在構造方法中初始化students ?????*/ ????public?MapTest(){ ????????this.students?=?new?HashMap<String,Student>(); ????} ????/** ?????*?測試添加:輸入學生ID,判斷是否被占用 ?????*?未占用,則輸入學生姓名,創建新學生對象,并且 ?????*?添加到students中 ?????*/ ????public?void?testAdd(){ ????????Scanner?sca?=?new?Scanner(System.in); ????????int?i=?0; ????????while(i<3){ ????????????System.out.println("請輸入學生ID"); ????????????String?ID?=?sca.next(); ????????????//判斷ID是否被占用 ????????????Student?st?=?students.get(ID); ????????????if(st?==?null){ ????????????????//提示輸入姓名 ????????????????System.out.println("請輸入姓名"); ????????????????String?name?=?sca.next(); ????????????????//創建新的學生對象 ????????????????Student?newStudent?=?new?Student(ID,name); ????????????????//通過調用students的put方法,添加ID-學生映射 ????????????????students.put(ID,newStudent); ????????????????System.out.println("添加成功:"+students.get(ID).id+students.get(ID).name); ????????????????i++; ????????????}else{ ????????????????System.out.println("該學生ID已被占用!"); ????????????????continue; ????????????} ????????} ????} ????/** ?????*?測試Map的keySet方法遍歷返回學生列表 ?????*/ ????public?void?testKeySet(){ ????????//通過keySet方法,返回Map中的所有鍵的集合 ????????Set<String>?keySet?=?students.keySet(); ????????//取得students的容量 ????????System.out.println("總共有"+students.size()+"個學生"); ????????//遍歷keySet,取得每一個鍵,在調用get方法取得每個鍵的value ????????for?(String?stuId:keySet){ ????????????Student?st?=?students.get(stuId); ????????????if(st?!=?null){ ????????????????System.out.println("學生:"+st.id+st.name); ????????????} ????????} ????} ????/** ?????*?測試刪除,remove ?????*?@param?args ?????*/ ????public?void?testRemove(){ ????????System.out.println("請輸入要刪除的學生ID!"); ????????//輸入待刪除的學生ID ????????Scanner?console?=?new?Scanner(System.in); ????????while(true){ ????????????String?ID?=?console.next(); ????????????Student?st?=?students.get(ID); ????????????if(st?==null){ ????????????????//提示ID不存在 ????????????????System.out.println("該ID不存在!"); ????????????????continue; ????????????} ????????????students.remove(ID); ????????????System.out.println("成功刪除學生:"+st.name); ????????????break; ????????} ????} ????/** ?????*?測試修改 ?????*/ ????public?void?testModify(){ ????????System.out.println("請輸入要修改的學生的ID!"); ????????Scanner?console?=?new?Scanner(System.in); ????????while(true){ ????????????String?stuID?=?console.next(); ????????????Student?st?=?students.get(stuID); ????????????if(st?==?null){ ????????????????System.out.println("該ID不存在!"); ????????????????continue; ????????????} ????????????System.out.println("當前該學生ID,所對應的學生為:"+st.name); ????????????System.out.println("請輸入新的學生姓名:"); ????????????String?name?=?console.next(); ????????????Student?newStudent?=?new?Student(stuID,name); ????????????students.put(stuID,newStudent); ????????????System.out.println("修改成功!"); ????????????break; ????????} ????} ????/** ?????*?通過entrySet方法來遍歷Map ?????*?@param?args ?????*/ ????public?void?testEntrySet(){ ????????Set<Map.Entry<String,Student>>?entrySet?=?students.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.testAdd(); ????????mt.testKeySet(); //????????mt.testRemove(); ????????mt.testEntrySet(); ????????mt.testModify(); ????????mt.testEntrySet(); ????} }
2018-12-14
首先你要知道Java中無序(unordered),有序(ordered)是什么意思,它們跟我們我們所理解的可能不太一樣.
? 在Java中無序指的是Java語言沒有規定某個容器按什么順序遍歷,在不同的Java虛擬機上對某個容器的實現是不一樣,比如說運行在Windows和Linux上的Java虛擬機對HashSet的遍歷順序可能不太一樣,但對同一種虛擬機來說遍歷輸出都是一樣的。而不是我們日常所理解的"無序就是亂序"的意思。
? 有序也是一樣的道理,Java規定了容器的遍歷順序,在不同的Java虛擬機上要保證遍歷的順序跟加入元素的順序一致。
? 通俗地來講,在Java中無序就是不同的Java虛擬機對某個容器有不同的遍歷方法,但對每一個具體的虛擬機它們的遍歷方法是固定的.比如你遇到的情況在Windows上運行的Java虛擬機對HashSet的遍歷只有一種輸出方式,但你換一個Java虛擬機跑一跑你這個程序可能輸出就不一樣了。
2018-12-13
我的也是有序輸出,搞不懂為什么。。。
2018-07-17
設置輸入五六個,測試多幾次就好了。
2018-07-05
同我也是這樣的,不管怎么輸入結果都是有序的,不知道為什么我Set集輸出的結果也是一直都是有序的
2018-06-05
鏈表和哈希表的區別。
如果你學過數據結構,你就知道鏈表的特性,list是一種鏈表
set是哈希表,通過哈希值來存取,所以理論上的存取時間復雜度是O(1)
你每次運行結果是不一樣的