為什么我一樣輸入ID:1、2、......、9,都到9了,而且value值我還特意打亂了輸入,結(jié)果運(yùn)行出來的順序還是有序的。。。而講師只輸入了3個(gè)key值就已經(jīng)表現(xiàn)出了亂序。。。這究竟是怎么回事?

public?class?MapTest?{
Scanner?input=new?Scanner(System.in);
//創(chuàng)建Map對象,用來承裝學(xué)生類型對象
public?Map<String,Student>?students;
//在構(gòu)造器中初始化students屬性
public?MapTest(){
this.students=new?HashMap<String,Student>();
}
//測試“添加”方法:接收輸入學(xué)生ID,檢測是否被占用;若未被占用,則提示輸入姓名并創(chuàng)建新學(xué)生對象,添加到students中
public?void?testPut()?{
int?a=0;
while(a<9)?{
System.out.println("請輸入學(xué)生ID:");
String?id=input.next();
//判斷ID是否被占用
Student?st=students.get(id);??????????//此處若students中不存在此ID,則返回null值。
if(st==null)?{
System.out.println("請輸入學(xué)生姓名:");
String?name=input.next();
//創(chuàng)建新的學(xué)生對象
Student?newStudent=new?Student(id,name);
//通過調(diào)用students的put()方法,添加“ID-學(xué)生”映射
students.put(id,?newStudent);
//if條件為“st==null",所以此處不能替換為“st.name",因?yàn)閟t中可能包含空指針。
System.out.println("成功添加學(xué)生:"+newStudent.name);
a++;
}else?{
System.out.println("您輸入的ID已被占用!");
}
}
}
//測試Map(students)的keySet()方法
public?void?keySet()?{
//通過keySet方法,返回students中所有“鍵”的集合
Set<String>?key=students.keySet();
System.out.println("總共有"+students.size()+"個(gè)學(xué)生");
for(String?stuId:key)?{
Student?st=students.get(stuId);
if(st!=null)?{
System.out.println("學(xué)生:"+st.name);
}
}
}
//測試刪除Map中的映射
public?void?testRemove()?{
//判斷是否有對應(yīng)的學(xué)生對象
while(true)?{
System.out.println("請輸入要?jiǎng)h除的學(xué)生的ID:");
String?rmId=input.next();
Student?st=students.get(rmId);
if(st==null)?{
System.out.println("輸入的ID不存在!");
continue;
}
students.remove(rmId);
System.out.println("學(xué)生:"+st.name+"已刪除!");
break;
}
}
//通過entrySet方法來遍歷Map
public?void?testEntrySet()?{
//通過entrySet方法返回Map中的所有鍵值對
Set<Entry<String,Student>>?entrySet=students.entrySet();
for(Entry<String,Student>?entry:entrySet)?{
System.out.println("取得鍵:"+entry.getKey());
System.out.println("對應(yīng)的值為:"+entry.getValue().name);
}
}
//利用put()方法修改Map中已有的映射
public?void?testModify()?{
System.out.println("請輸入要修改的學(xué)生ID:");
while(true)?{
String?id=input.next();
//從students中查找該學(xué)生ID對應(yīng)的學(xué)生對象
Student?st=students.get(id);
if(st==null)?{
System.out.println("該ID不存在,請重新輸入!");
}else?{
System.out.println("當(dāng)前ID所對應(yīng)的學(xué)生為:"+st.name);
System.out.println("請輸入新的學(xué)生姓名:");
String?newName=input.next();
Student?newSt=new?Student(id,newName);
students.put(id,?newSt);
System.out.println("修改成功!");
break;
}
}
}
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
MapTest?mt=new?MapTest();
mt.testPut();
mt.keySet();
// mt.testRemove();
mt.testModify();
mt.testEntrySet();
}
}
2018-01-28
好像會(huì)根據(jù)鍵值進(jìn)行排序
2020-03-12
我引用下別人的話:在Java中無序指的是Java語言沒有規(guī)定某個(gè)容器按什么順序遍歷,在不同的Java虛擬機(jī)上對某個(gè)容器的實(shí)現(xiàn)是不一樣,比如說運(yùn)行在Windows和Linux上的Java虛擬機(jī)對HashSet的遍歷順序可能不太一樣,但對同一種虛擬機(jī)來說遍歷輸出都是一樣的。而不是我們?nèi)粘K斫獾?無序就是亂序"的意思。
2018-12-13
同樣是有序的,無論如何打亂,都會(huì)按照輸入的順序輸出,,,
2018-06-01
map是數(shù)組和鏈表的形式,數(shù)組是有序的(便于查詢,速度快),鏈表是無序的(利于插入和刪除)
2018-01-28
用了你的代碼,也是有序,會(huì)不會(huì)是java更新后有這個(gè)特性,不影響