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. MySQL 05章_模糊查询和聚合函数

    在之前的查询都需要对查询的关机中进行“精确”.“完整”完整的输入才能查询相应的结果, 但在实际开发过程中,通常需要考虑用户可能不知道“精确”.“完整”的关键字, 那么就需要提供一种不太严格的查询方式, ...

  2. C#学习笔记----反射基础

    反射基础 反射用于在程序运行过程中,获取类里面的信息或发现程序集并运行的一个过程.通过反射可以获得.dll和.exe后缀的程序集里面的信息.使用反射可以看到一个程序集内部的类,接口,字段,属性,方法, ...

  3. Linux 添加时间

    添加在指令后面 `date +%Y%m%d%H%M`注意date和+之间一定要有空格 ps: %%    一个文字的 %  %a    当前locale 的星期名缩写(例如: 日,代表星期日)  %A ...

  4. 线段树逆序对(偏序)——cf1187D好题!

    /* 排除掉所有不可能的情况,剩下的就是可行的 1.数的数量不相同 2.对任意一个区间进行排序,等价于可以交换任意逆序对, 那么从1到n扫描b数组,判断是否可以将a数组中等于b[i]的值所在的位置j交 ...

  5. http://wiki.ros.org/navigation/Tutorials/RobotSetup

    http://wiki.ros.org/navigation/Tutorials/RobotSetup

  6. Android NDK应用原理

    转:http://shihongzhi.com/ndk/ 那么首先看一下Android的系统框架: 最底层是Linux Kernel,然后上面是封装的库及Android runtime.再上面是App ...

  7. VS2010-MFC(对话框:文件对话框)

    转自:http://www.jizhuomi.com/software/173.html 一 文件对话框的分类       文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中 ...

  8. 生成器yield(17-06)

    yield  执行以上代码,yield后面可以有返回值 next() 获取 next的使用次数,是你生成器中yield出现的次数 def p(): print("ok") yiel ...

  9. import time 进度条动态输出26个字母

    # 2018-08-06 19:42:51 import time # 调用时间模块 num = 97 # 字母a while num <= 115: # print(chr(num), end ...

  10. Java中关于注释、标识符、变量、常量、数据类型、类型转换、转移字符以及数值型的表现形式的详解

    Java文件的注意事项 在同一个Java文件中,可以定义多个类,但是被public修饰的类只能够有一个,并且此类名要与文件名一致. 在同一个类中,可以定义多个方法,但是名字叫做main的方法只能有一个 ...