• java——集合、泛型、ArrayList、LinkedList、foreach循环、模拟ktv点歌系统


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

      

  • 相关阅读:
    proc_create和create_proc_entry的区别
    ubuntn 12.04 rk环境及 相关使用 配置
    postcore_initcall(), arch_initcall(), subsys_initcall(), device_initcall() 调用顺序
    linux的zip 命令
    Mutex::AutoLock介绍
    camera 管脚功能和调试分析
    Android设备中实现Orientation Sensor(图)兼谈陀螺仪
    struct stat 操作 小结
    linux中字符串转换函数 simple_strtoul
    吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:HibernateMap集合属性
  • 原文地址:https://www.cnblogs.com/gaoquanquan/p/9608604.html
Copyright © 2020-2023  润新知