集合:一系列特殊的类,这些类可以存储任意类型的对象,长度可变,集合类都在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. pycharm安装 package报错:module 'pip' has no attribute 'main'

    转自: <pycharm安装 package报错:module 'pip' has no attribute 'main'> https://www.cnblogs.com/Fordest ...

  2. mysql查询语句例题

    1.一条SQL语句查询两表中两个字段 首先描述问题,student表中有字段startID,endID.garde表中的ID需要对应student表中的startID或者student表中的endID ...

  3. python os.startfile python实现双击运行程序 python监控windows程序 监控进程不在时重新启动

    用python监控您的window服务 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://world77.blog.51cto.co ...

  4. 关于surf显示立体图,可视化分析数据

    如果想判断一个点(x,y)对应的ZV值是否在平面上方.平面上.平面下方,只要将(x,y)带入方程,得到z. 如果ZV大于>Z,则在平面上方:如果ZV<Z,则在方面下方:若ZV=Z,则在平面 ...

  5. AutoMapper学习笔记

    进入公司后学习到的东西,之前记录在github上 现在搬运过来 AutoMapperDemo 需要安装两个包 AutoMapper AutoMapper.Extensions.Microsoft.De ...

  6. BluetoothGetRadioInfo 函数

    DWORD BluetoothGetRadioInfo( HANDLE hRadio, PBLUETOOTH_RADIO_INFO pRadioInfo );获取蓝牙设备的信息.参数: hRadio ...

  7. 删除eclipse Maven 进程 导致eclipse的workspace 启动不了

    异常描述: An internal error occurred during: "reload maven project". java.lang.NullPointerExce ...

  8. #410(div2)B. Mike and strings

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  9. JSP相关背景

    -----------------siwuxie095                             Sun Microsystems             SUN 即 Stanford ...

  10. pig flatten

    今天通过不断的尝试,终于知道这个flatten的用法了.其实吧,有时候关键是要test,才能充分理解解说.不过,同事给说的有点问题,误导了我.整的我一直没明白怎么回事. 这是官方的解释: The FL ...