package?com.imooc.test;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.Set;
public?class?TestMap?{
public?Map<Integer,?String>?map;
public?TestMap()?{
//?TODO?Auto-generated?constructor?stub
map?=?new?HashMap<Integer,?String>();
}
public?void?testPut(){
map.put(3,?"爸爸");
map.put(1,?"孫子");
map.put(4,?"爺爺");
map.put(2,?"兒子");
}
public?void?testKeySet(){
Set<Integer>?keySet?=?map.keySet();
for(Integer?key?:?keySet){
String?st?=?map.get(key);
if?(st?!=?null)
System.out.println(st);
}
}
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
TestMap?tm?=?new?TestMap();
tm.testPut();
tm.testKeySet();
}
}陳碼農(nóng)?【Java入門第三季】- 【第5章】 - 【5-2學(xué)生選課---使用Map添加學(xué)生】package?com.imooc.collection_map;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.Map.Entry;
import?java.util.Scanner;
import?java.util.Set;
public?class?MapTest?{
/**
?*?用來(lái)承裝學(xué)生類型的對(duì)象
?*/
public?Map<String,?Student>?students;
/**
?*?在構(gòu)造器中初始化students屬性
?*/
public?MapTest()?{
this.students?=?new?HashMap<String,?Student>();
}
/**
?*?測(cè)試添加:?輸入學(xué)生ID,?判斷是否被占用?若未被占用,?則輸入姓名,?創(chuàng)建新學(xué)生對(duì)象?并且添加到students中
?*/
public?void?testPut()?{
//?創(chuàng)建一個(gè)Scanner對(duì)象,?用來(lái)獲取輸入的學(xué)生ID和姓名
Scanner?scan?=?new?Scanner(System.in);
int?i?=?0;
while?(i?<?3)?{
System.out.println("請(qǐng)輸入學(xué)生ID:?");
String?ID?=?scan.next();
//?判斷該ID是否被占用
Student?st?=?students.get(ID);
if?(st?==?null)?{
//?提示輸入學(xué)生姓名
System.out.println("請(qǐng)輸入學(xué)生姓名:?");
String?name?=?scan.next();
//?創(chuàng)建新的學(xué)生對(duì)象
Student?newStudent?=?new?Student(ID,?name);
//?通過(guò)調(diào)用students的put方法,?添加?ID-學(xué)生?映射
students.put(ID,?newStudent);
System.out.println("成功添加學(xué)生:"?+?students.get(ID).name);
i++;
}?else?{
System.out.println("該學(xué)生ID已被占用!");
continue;
}
}
}
/**
?*?通過(guò)keySet方法遍歷Map
?*/
public?void?testKeySet()?{
//?通過(guò)keySet方法,?返回Map中所有"鍵"的Set集合
Set<String>?keySet?=?students.keySet();
//?取得students的容量
System.out.println("總共有:"?+?students.size()?+?"個(gè)學(xué)生!");
//?遍歷keySet,?取得每一個(gè)鍵,?再調(diào)用get方法取得每個(gè)鍵對(duì)應(yīng)的value
for?(String?stuId?:?keySet)?{
Student?st?=?students.get(stuId);
if?(st?!=?null)
System.out.println("學(xué)生:?"?+?st.name);
}
}
/**
?*?
?*?@param?args
?*/
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
MapTest?mt?=?new?MapTest();
//?調(diào)用testPut()
mt.testPut();
mt.testKeySet();
}package?com.imooc.collection_map;
import?java.util.HashSet;
import?java.util.Set;
/**
?*?學(xué)生類
?*?
?*?@author?KEN
?*
?*/
public?class?Student?implements?Comparable<Student>{
public?String?id;
public?String?name;
public?Set<Course>?courses;?//?List,?Queue,?Set?是?Collection的子接口
//Student構(gòu)造方法
public?Student(String?id,?String?name)?{
this.id?=?id;
this.name?=?name;
this.courses?=?new?HashSet<Course>();
}
}
3 回答
已采納

Its_forever
TA貢獻(xiàn)361條經(jīng)驗(yàn) 獲得超328個(gè)贊
剛剛格式亂了:
你是想說(shuō):老師的輸入順序是1,2,3為什么打印出來(lái)的卻是3,2,1吧?? 還是我之前說(shuō)的,Set集合的無(wú)序性體現(xiàn)在輸入順序和輸出順序不一樣。? 比如:我這樣輸入? 學(xué)號(hào)為:1??再輸入姓名:Tom???????//一 學(xué)號(hào)為:3??再輸入姓名:xiaoming??//二 學(xué)號(hào)為:2??再輸入姓名:Jack??????//三? 輸出順序還是(3,2,1)。? 不論你怎么改變一,二,三的順序,輸出順序始終是(3,2,1)。? 這就是我說(shuō)的,Set的無(wú)序性體現(xiàn)在輸入順序和輸出順序不一致。

Its_forever
TA貢獻(xiàn)361條經(jīng)驗(yàn) 獲得超328個(gè)贊
關(guān)于set無(wú)序集合,它的無(wú)序性體現(xiàn)在不按照添加的時(shí)候的順序存儲(chǔ) 。
比如你的添加順序是這樣的:
????????map.put(3,?"爸爸"); ????????map.put(1,?"孫子"); ????????map.put(4,?"爺爺"); ????????map.put(2,?"兒子");
如果他是有序的話那么他的輸出順序是不是就該是:
爸爸,孫子,爺爺,兒子
但是它卻輸出了:
孫子,兒子,爸爸,爺爺
這就是Set集合無(wú)序性的體現(xiàn),而不是輸出順序的無(wú)序性。
其實(shí)Set也是有序的,只是他的內(nèi)部是按著hashCode來(lái)排序的??雌饋?lái)無(wú)序而已。
你數(shù)字感覺(jué)的不明顯,用字符串排序就明顯一些了;
?public?static?void?main(String[]?args)?{ ????????Collection?people?=?new?HashSet(); ????????people.add("孫子");?//1 ????????people.add("爺爺");?//2 ????????people.add("兒子");??//3 ????????people.add("爸爸"?);??//4 ???????? ????????Iterator?it?=?people.iterator(); ????????while(it.hasNext()){ ?????????String?test?=?(String)it.next(); ?????????System.out.println(test); ????} ????} ???? ???//?輸出為:爸爸?兒子?爺爺?孫子
你不論怎么改變1,2,3,4的順序,他的輸出都是不會(huì)變的。
以上是我個(gè)人理解的Set集合的無(wú)序性。
添加回答
舉報(bào)
0/150
提交
取消