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