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. ...
随机推荐
- 安装phpredis
1.下载安装包 https://github.com/nicolasff/phpredis/archive/2.2.5.tar.gz 2.解压到~目录 tar -xvf phpredis-2.2.5. ...
- Poj 1659 Distance on Chessboard(国际象棋的走子规则)
一.Description 国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间.如下图所示: 王.后.车.象的走子规则如下: 王:横.直.斜都可以走,但每步限走一格. 后:横.直.斜都可以走 ...
- Azure 用户自定义路由 (User Defined Route)
在公有云环境中,用户创建了一个Vnet,添加了若干个网段后,这几个网段是全联通的状态. 如果希望在Vnet中添加一些功能性的设备,比如防火墙.IPS.负载均衡设备等,就需要进行用户自定义路由的配置. ...
- 【转】 Pro Android学习笔记(六十):Preferences(4):MultiSelect List Preference
目录(?)[-] XML文件 在设备中保存 读出信息 ListPreference提供单选列表,我们可以通过CheckBoxPreference提供多选列表.此外,Android在3.0后提供Mult ...
- Ubuntu18.04安装Docker, centos7安装Docker
Ubuntu18.04安装Docker 第一种方法从Ubuntu的仓库直接下载安装: 安装比较简单,这种安装的Docker不是最新版本,不过对于学习够用了,依次执行下面命令进行安装. $ sudo a ...
- Python循环-break和continue
break用于完全结束一个循环,跳出循环体,执行循环后面的语句 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" count = ...
- 用python做的windows和linx文件夹同步。解决自动同步、加快传输大量小文件的速度、更丰富的文件上传过滤设置。
现在工具不好用,用的pycharm自动同步,但对于git拉下来的新文件不能自动上传到linux,只有自己编辑过或者手动ctrl + s的文件才会自动同步.导致为了不遗漏文件,经常需要全量上传,速度非常 ...
- .NET生成ICO图标
using System; using System.Collections.Generic; using System.Web; using System.Drawing; using System ...
- [Manacher+bit]Palindrome
https://nanti.jisuanke.com/t/15428 题目大意:离散表示的字符串,求其最长回文串长度. 解题关键:若只用Manacher算法,在统计sum时会超时,所以加一个树状数组来 ...
- js开发:数组的push()、pop()、shift()和unshift()(转)
js开发:数组的push().pop().shift()和unshift() 2017-05-18 11:49 1534人阅读 评论(0) 收藏 举报 分类: javascript开发(22) 版 ...