集合:一系列特殊的类,这些类可以存储任意类型的对象,长度可变,集合类都在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. BZOJ1216:[HNOI2003]操作系统

    我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...

  2. Poj 1936,3302 Subsequence(LCS)

    一.Description(3302) Given a string s of length n, a subsequence of it, is defined as another string ...

  3. Poj 1017 Packets(贪心策略)

    一.题目大意: 一个工厂生产的产品用正方形的包裹打包,包裹有相同的高度h和1*1, 2*2, 3*3, 4*4, 5*5, 6*6的尺寸.这些产品经常以产品同样的高度h和6*6的尺寸包袱包装起来运送给 ...

  4. Centos7搭建pptp

    废话不多说,先上脚本地址:Centos7一键pptp 使用方法: wget https://raw.githubusercontent.com/DanylZhang/VPS/master/CentOS ...

  5. Quartz.NET+TopSelf 实现定时服务

    转载http://www.cnblogs.com/jys509/p/4628926.html Quartz.NET 入门 2015-07-09 00:59 by jiangys, 67858 阅读,  ...

  6. ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证【转载】

    http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-4_2_2-validation.html 介绍模型验证 在一个应用程序将数据存储到数据库之前,这个应 ...

  7. linux命令-vim命令模式

    编辑模式下 按 “esc” 进去命令模式 :wq 保存并退出 :w  保存 已写入 :q!不保存强制退出 :wq! 强制保存退出 :set nu 显示行号 :set nonu 去掉行号 :nohl 取 ...

  8. SVN使用技巧和参考文档总结

    以下文章为网上收集: myEclipse 8.5下SVN环境的搭建(重点推荐) SVN建立版本库,配置用户和权限 Tortoise SVN使用方法,简易图解 版本控制软件SVN使用方法详解 学习笔记 ...

  9. HTML5新增的结构元素

    HTML5的结构 一:新增的主体结构元素 在HTML5中,为了使文档的结构更加清晰明确,追加了几个与页眉,页脚内容区块等文档结构相关联的结构元素. 1.1article元素 article元素代表文档 ...

  10. CSS学习系列1 - CSS中的盒子模型 box model

    css中有一个盒子模型的概念. 主要是用来告诉浏览器如何来计算页面元素的宽度和高度, 比如该元素的宽度/高度 是否包括内边距,边框,外边距.  盒子模型有一个属性box-sizing属性来说明是否包括 ...