public?void?testPut(){
????????int?i=0;
????????Scanner?reader?=?new?Scanner(System.in);
????????while(i<3){
????????????System.out.print("請(qǐng)輸入學(xué)生ID:");
????????????String?stuId?=?reader.next();
????????????Student?st?=?students.get(stuId);
????????????if(st==null){
????????????????System.out.print("請(qǐng)輸入學(xué)生姓名:");
????????????????String?stuName=reader.next();
????????????????students.put(stuId,?new?Student(stuId,stuName));
????????????????System.out.println("成功添加學(xué)生:"+students.get(stuId).name);
????????????????i++;
????????????}else
????????????????System.out.println("學(xué)生ID已被占用!");
????????}
????}
public?void?testKeySet(){
????????Set<String>?stuIDs?=?students.keySet();
????????System.out.println("共有"+students.size()+"個(gè)學(xué)生");
????????for?(String?string?:?stuIDs)?{
????????????Student?st?=?students.get(string);
????????????System.out.println(st.id+":"+st.name);
????????}
????}
2017-03-07
研究了一段時(shí)間后發(fā)現(xiàn)所謂無(wú)序,并非是輸出的結(jié)果每次會(huì)不一樣,而是放進(jìn)去之后沒(méi)有順序,
Map<String, Integer> m = new HashMap<>();
for(int i=0; i<10; i++) { ??
?m.put("key"+i, i);?
}?
System.out.println(m);
這段代碼就能看出來(lái),放進(jìn)去的時(shí)候是1-10,輸出的卻不是,但是輸出的結(jié)果卻是固定的,也就是說(shuō)沒(méi)有順序但是執(zhí)行結(jié)果缺一致,深入源碼發(fā)現(xiàn)其通過(guò)放入的對(duì)象hashcode計(jì)算出其索引,然后放入,也就是說(shuō)在這個(gè)時(shí)候順序就固定了,另外從他的遍歷方式能夠看出來(lái)是鏈表方式,使用next節(jié)點(diǎn)連接下一個(gè)數(shù)值,所以雖說(shuō)他是無(wú)序的,但執(zhí)行結(jié)果缺是唯一的
2017-03-05
你可以看看源碼,計(jì)算機(jī)怎么去存一個(gè)無(wú)序的東西或者怎么去存一個(gè)有序的東西,答案是把數(shù)按添加順序存進(jìn)去,有序的的東西會(huì)有明確的地址引用,也就是相對(duì)于數(shù)組的角標(biāo)。而無(wú)序只是把角標(biāo)隱去了而已,再不打亂內(nèi)部順序的情況,是不會(huì)破壞內(nèi)部的順序。
2017-03-03
你多試幾次 ?看看