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

  

java——集合、泛型、ArrayList、LinkedList、foreach循环、模拟ktv点歌系统的更多相关文章

  1. Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  2. java集合系列之LinkedList源码分析

    java集合系列之LinkedList源码分析 LinkedList数据结构简介 LinkedList底层是通过双端双向链表实现的,其基本数据结构如下,每一个节点类为Node对象,每个Node节点包含 ...

  3. Java集合框架之LinkedList浅析

    Java集合框架之LinkedList浅析 一.LinkedList综述: 1.1LinkedList简介 同ArrayList一样,位于java.util包下的LinkedList是Java集合框架 ...

  4. 从源码看Java集合之ArrayList

    Java集合之ArrayList - 吃透增删查改 从源码看初始化以及增删查改,学习ArrayList. 先来看下ArrayList定义的几个属性: private static final int ...

  5. Java集合(六)--ArrayList、LinkedList和Vector对比

    在前两篇博客,学习了ArrayList和LinkedList的源码,地址在这: Java集合(五)--LinkedList源码解读 Java集合(四)--基于JDK1.8的ArrayList源码解读 ...

  6. Java集合之ArrayList和LinkedList的实现原理以及Iterator详解

    ArrayList实现可变数组的原理: 当元素超出数组内容,会产生一个新数组,将原来数组的数据复制到新数组中,再将新的元素添加到新数组中. ArrayList:是按照原数组的50%来延长,构造一个初始 ...

  7. java 集合之ArrayList、Vector、LinkedList、CopyOnWriteArrayList

    ArrayList 线程不安全. 底层Object[]数组实现,用transient关键字修饰,防止序列化,然后重写了readObject和writeObject方法,为了提高传输效率. 插入时会判断 ...

  8. java 集合之Arraylist的遍历及排序

    最近培训是先学习java基础 从最基本的开始学起 因为今天刚刚开博客 要把上周的一些重点内容归纳一下 1.Arraylist常用遍历以及排序 import java.util.ArrayList; i ...

  9. List集合与Set集合(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,可变参数)

    List集合介绍及常用方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* java. ...

随机推荐

  1. gulp安装简介

    1 全局安装gulp:npm install -g gulp 2 在项目根目录中,安装项目的开发依赖:npm install --save-dev gulp 2.1 根据gulpfile.js中的依赖 ...

  2. Qt安装与配置

    安装Qt 安装Qt Creator,打开终端执行如下命令: sudo apt-get install qt5-default qtcreator -y 安装Qt示例和文档: sudo apt-get ...

  3. Myeclipse如何使用Maven添加jar包

    很多新手都不知道如何在maven项目里添加jar包. 以前我还没接触maven的时候下载过一个demo,是maven项目. 我居然是照着他的pom.xml文件一个一个的写!!! 很多人认为理所当然的东 ...

  4. IIS备份和还原

    当我们电脑系统有大量的站点和虚拟目录的时候,电脑因为种种原因需要重做系统,那么重装系统后这些站点我们是否只能一个一个的添加,如果有成百上千个站点呢,任务量可想而知,本文将介绍如何备份和还原window ...

  5. java验证,”支持6-20个字母、数字、下划线或减号,以字母开头“这个的正则表达式怎么写?

    转自:https://yq.aliyun.com/wenzhang/show_96854 问题描述 java验证,”支持6-20个字母.数字.下划线或减号,以字母开头“这个的正则表达式怎么写? 验证” ...

  6. BZOJ4085: [Sdoi2015]音质检测

    BZOJ4085: [Sdoi2015]音质检测 由于这题太毒了,导致可能会被某些人卡评测,于是成了一道权限题... 本蒟蒻表示没钱氪金... 但是可以去洛谷/Vijos搞搞事... 但是洛谷上只能评 ...

  7. 第五课5、ROS客户端2

    1.简单的主题(topic)发布者和主题订阅者: 编写主题发布者节点需要: a.初始化ROS系统: b.广播消息:在foo主题上发布Foo_type_msg类型的消息 c.指定频率发布消息到foo主题 ...

  8. Hibernate学习第一课

    Hibernate是一个框架 一个Java领域的持久化框架 一个ORM框架 对象的持久化: 狭义的理解:“持久化”仅仅指把对象永久保存到数据库中. 广义的理解:“持久化”包括和数据库相关的各种操作: ...

  9. 2. DVWA亲测CSRF漏洞

    DVWA登陆      用户名:admin   密码:password Low级: 查看源代码: <?php if (isset($_GET['Change'])) { // Turn requ ...

  10. Windows form UI skinEngine的使用方法

    1.安装SkinEngine(这里安装的是3.4.7) 链接: https://pan.baidu.com/s/1-kZ5KgYclshWc17jbuke5w 提取码: bp7n 复制这段内容后打开百 ...