輸出順序問(wèn)題
輸入的是2-1-4,輸出就變?yōu)?-1-2了,
試了好多遍都是這個(gè)樣子;
為什么?
package?com.imooc.collection; import?java.util.List; import?java.util.ArrayList; import?java.util.Arrays; import?java.util.Scanner; public?class?SetTest?{ //創(chuàng)建帶有泛型的List實(shí)例化對(duì)象,存放備選課程 public?List<Course>?coursesToSelect?=?new?ArrayList<Course>(); /** ?*用于往coursesToSelect中添加課程的方法 ?*/ public?void?testAdd(){ Course?cr1?=?new?Course("1","數(shù)據(jù)結(jié)構(gòu)"); coursesToSelect.add(cr1); Course?temp?=?(Course)coursesToSelect.get(0); //System.out.println("添加了課程:"?+?temp.id?+","+?temp.name); Course?cr2?=?new?Course("2","C語(yǔ)言"); coursesToSelect.add(0,cr2); Course?temp2?=?(Course)coursesToSelect.get(0); //System.out.println("添加了課程:"?+?temp2.id?+?","?+temp2.name); // //重復(fù)添加課程1 // coursesToSelect.add(cr1); // Course?temp0?=?(Course)coursesToSelect.get(2); // System.out.println("添加了課程:"?+?temp0.id?+","+?temp0.name); ? Course[]?course?=?{new?Course("3","離散數(shù)學(xué)"),new?Course("4","匯編語(yǔ)言")}; coursesToSelect.addAll(Arrays.asList(course)); Course?temp3?=?(Course)coursesToSelect.get(3); //Course?temp4?=?(Course)coursesToSelect.get(4);????? //System.out.println("添加了兩門課程:"?+? //temp3.id?+","?+?temp3.name?+?";"?+?temp4.id?+?","?+?temp4.name); Course[]?course2?=?{new?Course("5","高等數(shù)學(xué)"),new?Course("6","大學(xué)英語(yǔ)")}; coursesToSelect.addAll(2,Arrays.asList(course2)); Course?temp5?=?(Course)coursesToSelect.get(2); Course?temp6?=?(Course)coursesToSelect.get(3); //System.out.println("添加了兩門課程:"+ // temp5.id?+?","?+?temp5.name?+?";"?+?temp6.id?+?","?+temp6.name); } /** ?*?foreach循環(huán)遍歷集合內(nèi)元素,以顯示課程 ?*?@param?args ?*/ public?void?testForEach(){ System.out.println("有如下課程待選(通過(guò)for?each訪問(wèn)):"); for(Course?cr:coursesToSelect){ ??????? System.out.println(cr.id?+?","?+?cr.name); } } public?static?void?main(String[]?args)?{ SetTest?st?=?new?SetTest(); st.testAdd(); st.testForEach(); //創(chuàng)建學(xué)生對(duì)象 Student?student?=?new?Student("1","小羊"); System.out.println("歡迎:"?+?student.name?+?"選課!"); //創(chuàng)建一個(gè)Scanner對(duì)象 Scanner?input?=?new?Scanner(System.in); /** ?*?for循環(huán)3次獲取所選課程 ?*/ for(int?i?=?0;i?<?3;i++){ System.out.println("請(qǐng)輸入所選課程ID:"); String?courseId?=?input.next(); //for?each循環(huán)遍歷coursesToSelect,找到對(duì)應(yīng)課程 for(Course?cr:st.coursesToSelect){ if(cr.id.equals(courseId)){ student.courses.add(cr); /** ?*?Set中添加某個(gè)對(duì)象,無(wú)論添加多少次, ?*?最終只會(huì)保留第一次添加的對(duì)象的引用 ?*/ //student.courses.add(cr); // student.courses.add(null);?????//可添加null但沒(méi)什么意義??? } } } st.testForEachForSet(student);???? } /** ?*?for?each循環(huán) ?*/ public?void?testForEachForSet(Student?student){?????? //傳遞參數(shù)(此時(shí)好比沒(méi)有main方法,故對(duì)象student還不存在) System.out.println("共選擇了"+?student.courses.size()?+?"門課程!"); System.out.println("你選擇的課程如下:"); for(Course?cr?:?student.courses){ System.out.println(cr.id?+?","?+cr.name);???//呃呃為啥總是輸出固定的順序(倒序)呢?? } } }
2017-02-23
?coursesToSelect.add(0,cr2);我敲的這段代碼回報(bào)黃線,知道他是沒(méi)用,但,怎么老師的沒(méi)有呢
2017-02-10
從數(shù)據(jù)結(jié)構(gòu)角度來(lái)說(shuō),其實(shí)你每次向哈希集中add一個(gè)元素,計(jì)算機(jī)都會(huì)通過(guò)哈希函數(shù)為其計(jì)算一個(gè)唯一的哈希值,并且將這個(gè)哈希值與集合中現(xiàn)有元素的哈希值比較,來(lái)保證集合中的元素不重復(fù)。同樣地,哈希集的底層存儲(chǔ)結(jié)構(gòu)中,實(shí)際上是按照元素的哈希值從小到大“有序”存儲(chǔ)的,只不過(guò)這個(gè)順序和你輸入的元素順序不一定相同,因此我們說(shuō)哈希集是無(wú)序的。但是無(wú)序不代表隨機(jī),哈希集輸出時(shí)通常是按照哈希值的大小輸出的,所以你每次輸出的結(jié)果都是一樣的。(至于視頻中老師每次輸出結(jié)果都不一樣,應(yīng)該是和編譯器還有jdk版本有關(guān)吧,不同的版本哈希算法不太一樣)
2017-02-10
無(wú)序,至于你的問(wèn)題,你輸入123,他肯定會(huì)有所改變,你還是輸入123的話,他的改變會(huì)和之前一樣。你輸入213,他的結(jié)果又變了。你輸入的每個(gè)不同的順序,他打印出來(lái)也會(huì)和之前的一樣。
2017-02-08
因?yàn)镾et內(nèi)的對(duì)象是無(wú)序的,所以并不會(huì)按照輸入的順序輸出。
2017-02-08
無(wú)序的
2017-02-08
代碼貼出來(lái)看看