集合:一系列特殊的類,這些類可以存儲任意類型的對象,長度可變,集合類都在java.util包中。
但是集合記不住對象的類型,當把對象從集合中取出時這個對象的編譯類型就變成了Object類型。這樣在取元素的時候,如果進行強制類型轉換就會很容易出錯。
為解決這個問題,在java中引入“參數化類型”,即泛型。
泛型:
不能存放基本數據類型
ArrayList<String> list = new ArrayList<String>();
ArrayList:底層使用數組來保存元素,增加和刪除會創建新的數組,因而導致效率低,但索引方式訪問元素使得使用ArrayList集合查找元素很方便。
LinkedList:底層使用雙向循環鏈表,使得增刪操作效率高。
Iterator:迭代器
foreach循環:增強for循環,類似Python的for循環,但是這種方式只能訪問集合中的元素,不能改變元素。
模擬ktv點歌系統:
import java.util.*; public class exp{ public static void main(String[] args){ System.out.println("~~~~~~超豪華點歌系統~~~~~~"); System.out.println("輸入0添加歌曲"); System.out.println("輸入1歌曲置頂"); System.out.println("輸入2將所選歌曲提前"); System.out.println("輸入3退出系統"); LinkedList list = new LinkedList(); initMusic(list); printList(list); while(true) { System.out.println("請輸入要執行的操作號碼:"); Scanner scan = new Scanner(System.in); int command = scan.nextInt(); switch (command){ case 0: addMusic(list); printList(list); break; case 1: topMusic(list); printList(list); break; case 2: beforeMusic(list); printList(list); break; case 3: exitSystem(); // 跳出switch,並沒有跳出while break; default: System.out.println("輸入號碼有誤,請重新輸入:"); break; } } } private static void initMusic(LinkedList list){ list.add("稻香"); list.add("最炫民族風"); } // 1 add music private static void addMusic(LinkedList list){ System.out.println("請輸入要增加的歌曲名:"); Scanner scan = new Scanner(System.in); String str = scan.nextLine(); list.add(str); } // 2 top music private static void topMusic(LinkedList list){ System.out.println("請輸入要置頂的歌曲名:"); Scanner scan = new Scanner(System.in); String str = scan.nextLine(); int index = list.indexOf(str); if(index < 0){ System.out.println("當前列表沒有這首歌哦~"); }else{ list.remove(str); list.addFirst(str); } System.out.println("已經將歌曲置頂了哦~"); System.out.println("看下新列表嘛~"); } //set music before private static void beforeMusic(LinkedList list){ System.out.println("請輸入要置前的歌曲名:"); Scanner scan = new Scanner(System.in); String str = scan.nextLine(); int index = list.indexOf(str); if(index<0){ System.out.println("當前列表沒有這首歌哦~"); }else if(index == 0){ System.out.println("這首歌已經在最前面啦~"); }else{ list.remove(str); list.add(index-1, str); } System.out.println("已經將" + str + "置前了哦~"); } // 3 exit system private static void exitSystem(){ System.out.println("*********感謝您的使用*********"); System.exit(0); } // print music list private static void printList(LinkedList list){ System.out.println("歌曲列表如下:"); System.out.println("~~~~~~~~~~~~~~~~~~~~~"); for (Object obj: list){ System.out.println(obj); } System.out.println("*********************"); } }