LinkedList集合的底层是链表结构实现的,所以可以模拟栈(先进后出)和队列(先进先出)。

方法:

    addFirst()    //添加元素到列表的起始位置

    addLast()    //添加元素到列表的结束位置

    removeFirst()  //移除列表起始位置的元素

    removeLast()  //移除列表结束位置的元素

    getFirst()    //获取列表起始位置的元素

    getLast()    //获取列表结束位置的元素

User类

 package queue;

 public class User {

     private int id;
private String account;
private String password;
private String name; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getAccount() {
return account;
} public void setAccount(String account) {
this.account = account;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public User() {
super();
} public User(int id, String account, String password, String name) {
super();
this.id = id;
this.account = account;
this.password = password;
this.name = name;
} @Override
public String toString() {
return "User [id=" + id + ", account=" + account + ", password=" + password + ", name=" + name + "]";
} }

构造队列的方法类

 package queue;

 import java.util.LinkedList;

 /**
* LinkedList模拟队列,先进先出
*
* @author WJY
*
*/
public class Queue<T> { private LinkedList<T> linkedList = new LinkedList<T>(); /**
* 进队
*
* @param t
* 进队的元素
*/
public void enQueue(T t) {
linkedList.addLast(t);
} /**
* 出队
*
* @return 出队的元素
*/
public T deQueue() {
return linkedList.removeFirst();
} /**
* 销毁队列
*/
public void destroyQueue() {
linkedList.clear();
} /**
* 查看队首元素
*
* @return 队首的元素
*/
public T queueFirst() {
return linkedList.getFirst();
} /**
* 查看队尾元素
*
* @return 队尾的元素
*/
public T queueLast() {
return linkedList.getLast();
} /**
* 查看队列长度
*
* @return 队列的长度
*/
public int queueLength() {
return linkedList.size();
} /**
* 判断队列是否为空
*
* @return 队列为空 true 队列不为空 false
*/
public boolean isEmpty() {
return linkedList.isEmpty();
} /**
* 打印队列
*/
public String toString() {
return linkedList.toString();
} }

测试队列类

 package queue;

 import list.User;

 public class Test {

     public static void main(String[] args) {

         User user1 = new User(1, "账号1", "密码1", "姓名1");
User user2 = new User(2, "账号2", "密码2", "姓名2");
User user3 = new User(3, "账号3", "密码3", "姓名3");
User user4 = new User(4, "账号4", "密码4", "姓名4");
User user5 = new User(5, "账号5", "密码5", "姓名5"); Queue<User> queue = new Queue<User>(); queue.enQueue(user1);
queue.enQueue(user2);
queue.enQueue(user3);
queue.enQueue(user4);
queue.enQueue(user5);// 进队 System.out.println("队首元素:" + queue.queueFirst());
System.out.println("队尾元素:" + queue.queueLast());
System.out.println("队列长度:" + queue.queueLength());
System.out.println("队列是否为空:" + queue.isEmpty());
System.out.println(queue.toString());// 打印队列 queue.deQueue();
queue.deQueue();
queue.deQueue();// 出队 System.out.println("队首元素:" + queue.queueFirst());
System.out.println("队尾元素:" + queue.queueLast());
System.out.println("队列长度:" + queue.queueLength());
System.out.println("队列是否为空:" + queue.isEmpty());
System.out.println(queue.toString());// 打印队列 queue.destroyQueue();// 销毁队列 System.out.println("队列长度:" + queue.queueLength());
System.out.println("队列是否为空:" + queue.isEmpty());
System.out.println(queue.toString());// 打印队列 } }

测试结果:

队首元素:User [id=1, account=账号1, password=密码1, name=姓名1]
队尾元素:User [id=5, account=账号5, password=密码5, name=姓名5]
队列长度:5
队列是否为空:false
[User [id=1, account=账号1, password=密码1, name=姓名1], User [id=2, account=账号2, password=密码2, name=姓名2], User [id=3, account=账号3, password=密码3, name=姓名3], User [id=4, account=账号4, password=密码4, name=姓名4], User [id=5, account=账号5, password=密码5, name=姓名5]]
队首元素:User [id=4, account=账号4, password=密码4, name=姓名4]
队尾元素:User [id=5, account=账号5, password=密码5, name=姓名5]
队列长度:2
队列是否为空:false
[User [id=4, account=账号4, password=密码4, name=姓名4], User [id=5, account=账号5, password=密码5, name=姓名5]]
队列长度:0
队列是否为空:true
[]

User类

 package stack;

 public class User {

     private int id;
private String account;
private String password;
private String name; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getAccount() {
return account;
} public void setAccount(String account) {
this.account = account;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public User() {
super();
} public User(int id, String account, String password, String name) {
super();
this.id = id;
this.account = account;
this.password = password;
this.name = name;
} @Override
public String toString() {
return "User [id=" + id + ", account=" + account + ", password=" + password + ", name=" + name + "]";
} }

构造栈的方法类

 package stack;

 import java.util.LinkedList;

 /**
* LinkedList模拟栈,先进后出
*
* @author WJY
*
*/
public class Stack<T> { private LinkedList<T> linkedList = new LinkedList<T>(); /**
* 进栈
*
* @param t
* 进栈的元素
*/
public void push(T t) {
linkedList.addFirst(t);
} /**
* 出栈
*
* @return 出栈的元素
*/
public T pop() {
return linkedList.removeFirst();
} /**
* 销毁栈
*/
public void destroyStack() {
linkedList.clear();
} /**
* 查看栈顶元素
*
* @return 栈顶的元素
*/
public T stackFirst() {
return linkedList.getFirst();
} /**
* 查看栈底元素
*
* @return 栈底的元素
*/
public T stackLast() {
return linkedList.getLast();
} /**
* 查看栈长度
*
* @return 栈的长度
*/
public int stackLength() {
return linkedList.size();
} /**
* 判断栈是否为空
*
* @return 栈为空 true 栈不为空 false
*/
public boolean isEmpty() {
return linkedList.isEmpty();
} /**
* 打印栈
*/
public String toString() {
return linkedList.toString();
} }

测试栈类

 package stack;

 import list.User;

 public class Test {

     public static void main(String[] args) {

         User user1 = new User(1, "账号1", "密码1", "姓名1");
User user2 = new User(2, "账号2", "密码2", "姓名2");
User user3 = new User(3, "账号3", "密码3", "姓名3");
User user4 = new User(4, "账号4", "密码4", "姓名4");
User user5 = new User(5, "账号5", "密码5", "姓名5"); Stack<User> stack = new Stack<User>(); stack.push(user1);
stack.push(user2);
stack.push(user3);
stack.push(user4);
stack.push(user5);// 进栈 System.out.println("栈顶元素:" + stack.stackFirst());
System.out.println("栈底元素:" + stack.stackLast());
System.out.println("栈长度:" + stack.stackLength());
System.out.println("栈是否为空:" + stack.isEmpty());
System.out.println(stack.toString());// 打印栈 stack.pop();
stack.pop();
stack.pop();// 出栈 System.out.println("栈顶元素:" + stack.stackFirst());
System.out.println("栈底元素:" + stack.stackLast());
System.out.println("栈长度:" + stack.stackLength());
System.out.println("栈是否为空:" + stack.isEmpty());
System.out.println(stack.toString());// 打印栈 stack.destroyStack();// 销毁栈 System.out.println("栈长度:" + stack.stackLength());
System.out.println("栈是否为空:" + stack.isEmpty());
System.out.println(stack.toString());// 打印栈 } }

测试结果:

栈顶元素:User [id=5, account=账号5, password=密码5, name=姓名5]
栈底元素:User [id=1, account=账号1, password=密码1, name=姓名1]
栈长度:5
栈是否为空:false
[User [id=5, account=账号5, password=密码5, name=姓名5], User [id=4, account=账号4, password=密码4, name=姓名4], User [id=3, account=账号3, password=密码3, name=姓名3], User [id=2, account=账号2, password=密码2, name=姓名2], User [id=1, account=账号1, password=密码1, name=姓名1]]
栈顶元素:User [id=2, account=账号2, password=密码2, name=姓名2]
栈底元素:User [id=1, account=账号1, password=密码1, name=姓名1]
栈长度:2
栈是否为空:false
[User [id=2, account=账号2, password=密码2, name=姓名2], User [id=1, account=账号1, password=密码1, name=姓名1]]
栈长度:0
栈是否为空:true
[]

LinkedList集合 实现栈和队列的更多相关文章

  1. 用LinkedList集合演示栈和队列的操作

    在数据结构中,栈和队列是两种重要的线性数据结构.它们的主要不同在于:栈中存储的元素,是先进后出:队列中存储的元素是先进先出.我们接下来通过LinkedList集合来演示栈和队列的操作. import ...

  2. java 集合 Connection 栈 队列 及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  3. java集合详解(附栈,队列)

    1 集合 1.1 为什么会出现集合框架 [1] 之前的数组作为容器时,不能自动拓容 [2] 数值在进行添加和删除操作时,需要开发者自己实现添加和删除. 1.2 Collection接口 1.2.1 C ...

  4. 集合第七发练习之利用ArrayList做栈、队列

    栈:后进先出. 队列:先进先出. 利用这个核心思想,结合集合的add和remove方法做的栈和队列如下代码所示: 主类(t1()和t2()分别演栈和队列):   package cn.hncu.myS ...

  5. LinkedList学习:API调用、栈、队列实现

    参考的博客 Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例 如果你想详细的区了解容器知识以及本文讲的LinkedList,我推荐你去看这篇博客和这个做个的容器系列 Lin ...

  6. Collection集合重难点梳理,增强for注意事项和三种遍历的应用场景,栈和队列特点,数组和链表特点,ArrayList源码解析, LinkedList-源码解析

    重难点梳理 使用到的新单词: 1.collection[kəˈlekʃn] 聚集 2.empty[ˈempti] 空的 3.clear[klɪə(r)] 清除 4.iterator 迭代器 学习目标: ...

  7. 集合类——集合输出、栈和队列及Collections集合

    1.集合输出 在之前我们利用了toString()及get()方法对集合进行了输出,其实那都不是集合的标准输出,集合输出有四种方式:Iterator.ListIterator.Enumeration. ...

  8. Java:基于LinkedList实现栈和队列

    1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit; import java.util. ...

  9. 采用LinkedList来模拟栈数据结构的集合--先进后出

    三.用LinkedList来模拟栈数据结构的集合 /* * 自定义一个数据结构为LinkedList的集合类*/public class MyCollection_LinkedList { publi ...

随机推荐

  1. JDBC_数据库连接池DRUID

    /** * @Description: TODO(这里用一句话描述这个类的作用) * @Author aikang * @Date 2019/8/26 20:12 */ /* 1.数据库连接池: 1. ...

  2. 判断APP是否已安装

    NSString *str = [NSString stringWithFormat:@"%@://%@",[dic objectForKey:@"ios_url_sch ...

  3. Python基础知识之5——函数基础

    函数 函数是一个独立且封闭完成特定功能的代码块,可以在任何地方被调用.Python内置了很多函数,我们可以直接调用,使用的时候,先查询下Python的官方文档即可: http://docs.pytho ...

  4. CSS动画库——animate.css的使用

    Animate.css是一款强大的CSS3动画库 官网地址:https://daneden.github.io/animate.css/ 使用方法如下所示: (1)下载animate.css 下载地址 ...

  5. A decorative fence

    A decorative fence 在\(1\sim n\)的全排列\(\{a_i\}\)中,只有大小交错的(即任意一个位置i满足\(a_{i-1}<a_i>a_{i+1}ora_{i- ...

  6. thjinkphp 变量调试

    输出某个变量是开发过程中经常会用到的调试方法,除了使用php内置的var_dump和print_r之外,ThinkPHP框架内置了一个对浏览器友好的dump方法,用于输出变量的信息到浏览器查看. 大理 ...

  7. spark启动后出现“JAVA_HOME not set” 异常和"org.apache.hadoop.security.AccessControlException"异常

    /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/sbin/start-all.sh 启动后执行jps命令,主节点上有Master进程,其他子节点上有Wor ...

  8. H5 回到顶部按钮

    //这里我用的是svg,所以代码老长了,可以把svg部分换成自己的图片什么的$(function(){ var obj = $('<div style="width:1.3rem;po ...

  9. python代码打包成exe文件

    1.准备工作 1.安装pywin32.pyinstaller 2.准备好ico文件 找一个png格式的图片,使用png2ico脚本生成包含以下6个尺寸的ico文件:128×128 64×64 48×4 ...

  10. layui+croppers完成图片剪切上传

    不多说直接上代码: 前台代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" / ...