集合:一系列特殊的类,这些类可以存储任意类型的对象,长度可变,集合类都在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("*********************"); } }