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學生選課---使用Map添加學生】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?{
/**
?*?用來承裝學生類型的對象
?*/
public?Map<String,?Student>?students;
/**
?*?在構(gòu)造器中初始化students屬性
?*/
public?MapTest()?{
this.students?=?new?HashMap<String,?Student>();
}
/**
?*?測試添加:?輸入學生ID,?判斷是否被占用?若未被占用,?則輸入姓名,?創(chuàng)建新學生對象?并且添加到students中
?*/
public?void?testPut()?{
//?創(chuàng)建一個Scanner對象,?用來獲取輸入的學生ID和姓名
Scanner?scan?=?new?Scanner(System.in);
int?i?=?0;
while?(i?<?3)?{
System.out.println("請輸入學生ID:?");
String?ID?=?scan.next();
//?判斷該ID是否被占用
Student?st?=?students.get(ID);
if?(st?==?null)?{
//?提示輸入學生姓名
System.out.println("請輸入學生姓名:?");
String?name?=?scan.next();
//?創(chuàng)建新的學生對象
Student?newStudent?=?new?Student(ID,?name);
//?通過調(diào)用students的put方法,?添加?ID-學生?映射
students.put(ID,?newStudent);
System.out.println("成功添加學生:"?+?students.get(ID).name);
i++;
}?else?{
System.out.println("該學生ID已被占用!");
continue;
}
}
}
/**
?*?通過keySet方法遍歷Map
?*/
public?void?testKeySet()?{
//?通過keySet方法,?返回Map中所有"鍵"的Set集合
Set<String>?keySet?=?students.keySet();
//?取得students的容量
System.out.println("總共有:"?+?students.size()?+?"個學生!");
//?遍歷keySet,?取得每一個鍵,?再調(diào)用get方法取得每個鍵對應的value
for?(String?stuId?:?keySet)?{
Student?st?=?students.get(stuId);
if?(st?!=?null)
System.out.println("學生:?"?+?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;
/**
?*?學生類
?*?
?*?@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貢獻361條經(jīng)驗 獲得超328個贊
剛剛格式亂了:
你是想說:老師的輸入順序是1,2,3為什么打印出來的卻是3,2,1吧?? 還是我之前說的,Set集合的無序性體現(xiàn)在輸入順序和輸出順序不一樣。? 比如:我這樣輸入? 學號為:1??再輸入姓名:Tom???????//一 學號為:3??再輸入姓名:xiaoming??//二 學號為:2??再輸入姓名:Jack??????//三? 輸出順序還是(3,2,1)。? 不論你怎么改變一,二,三的順序,輸出順序始終是(3,2,1)。? 這就是我說的,Set的無序性體現(xiàn)在輸入順序和輸出順序不一致。

Its_forever
TA貢獻361條經(jīng)驗 獲得超328個贊
關(guān)于set無序集合,它的無序性體現(xiàn)在不按照添加的時候的順序存儲 。
比如你的添加順序是這樣的:
????????map.put(3,?"爸爸"); ????????map.put(1,?"孫子"); ????????map.put(4,?"爺爺"); ????????map.put(2,?"兒子");
如果他是有序的話那么他的輸出順序是不是就該是:
爸爸,孫子,爺爺,兒子
但是它卻輸出了:
孫子,兒子,爸爸,爺爺
這就是Set集合無序性的體現(xiàn),而不是輸出順序的無序性。
其實Set也是有序的,只是他的內(nèi)部是按著hashCode來排序的??雌饋頍o序而已。
你數(shù)字感覺的不明顯,用字符串排序就明顯一些了;
?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的順序,他的輸出都是不會變的。
以上是我個人理解的Set集合的無序性。
添加回答
舉報
0/150
提交
取消