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("*********************");
} }
java——集合、泛型、ArrayList、LinkedList、foreach循环、模拟ktv点歌系统的更多相关文章
- Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- java集合系列之LinkedList源码分析
java集合系列之LinkedList源码分析 LinkedList数据结构简介 LinkedList底层是通过双端双向链表实现的,其基本数据结构如下,每一个节点类为Node对象,每个Node节点包含 ...
- Java集合框架之LinkedList浅析
Java集合框架之LinkedList浅析 一.LinkedList综述: 1.1LinkedList简介 同ArrayList一样,位于java.util包下的LinkedList是Java集合框架 ...
- 从源码看Java集合之ArrayList
Java集合之ArrayList - 吃透增删查改 从源码看初始化以及增删查改,学习ArrayList. 先来看下ArrayList定义的几个属性: private static final int ...
- Java集合(六)--ArrayList、LinkedList和Vector对比
在前两篇博客,学习了ArrayList和LinkedList的源码,地址在这: Java集合(五)--LinkedList源码解读 Java集合(四)--基于JDK1.8的ArrayList源码解读 ...
- Java集合之ArrayList和LinkedList的实现原理以及Iterator详解
ArrayList实现可变数组的原理: 当元素超出数组内容,会产生一个新数组,将原来数组的数据复制到新数组中,再将新的元素添加到新数组中. ArrayList:是按照原数组的50%来延长,构造一个初始 ...
- java 集合之ArrayList、Vector、LinkedList、CopyOnWriteArrayList
ArrayList 线程不安全. 底层Object[]数组实现,用transient关键字修饰,防止序列化,然后重写了readObject和writeObject方法,为了提高传输效率. 插入时会判断 ...
- java 集合之Arraylist的遍历及排序
最近培训是先学习java基础 从最基本的开始学起 因为今天刚刚开博客 要把上周的一些重点内容归纳一下 1.Arraylist常用遍历以及排序 import java.util.ArrayList; i ...
- List集合与Set集合(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,可变参数)
List集合介绍及常用方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* java. ...
随机推荐
- tiny4412sdk-1506原生uboot卡死
于16年2月多购买了tiny4412sdk-1506,用友善之臂(以下简称友善)的superboot是可以进入linux,而用三星原始的uboot_tiny4412-20130729则不可以.出现现象 ...
- SSH不允许Root登陆的方法
不允许Root登陆的方法如下: vim /etc/ssh/sshd_config 把PermitRootLogin yes 改成: PermitRootLogin no 然后重启sshd服务: Ser ...
- zk 02之 Windows安装和使用zookeeper
本文介绍的 Zookeeper 是以 3.4.5 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非 ...
- 杂项-权限管理:Spring Secutity
ylbtech-杂项-权限管理:Spring Secutity Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在S ...
- PG degraded实验
1. 创建一个文件,并把该文件作为对象放到集群中: [root@node1 ~]# echo "this is test! " >>test.txt [root@nod ...
- 【总结整理】JQuery基础学习---动画
jQuery中隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局,如果在代码执行的时候,一般是通过js控制元素的st ...
- Tournament
题意: 有 $n$ 个 $K$ 维向量,若向量A只要有任意一维大于向量B,则认为A可能打败B,将n个向量一个一个加入,求问对于每次加完后的向量集合:有几个向量可能活到最后. 解法: 考虑如果A可以打败 ...
- 笔试题: 数据库 已看1 一些关键的sql语句练习 和选择题 有用 sql语句练习 挺好
一. 选择题 1.SQL语言是( C )语言. A.层次数据库 B.网络数据库 C.关系数据库 D.非数据库 redis 是 3.如果在where子句中有两个条件要同时满足,应该用哪个 ...
- 树莓派 Learning 002 装机后必要的操作 --- 08 实现PC端 远程登入 树莓派 --- 法2 远程登录树莓派的图形桌面
树莓派 装机后必要的操作 - 实现PC端 远程登入 树莓派 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 PC端系统:win10 x64 ...
- HTML5-A*寻路算法2
设置起点 设置终点 设置障碍 清除障碍 允许斜向跨越