LinkedList集合 实现栈和队列
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集合 实现栈和队列的更多相关文章
- 用LinkedList集合演示栈和队列的操作
在数据结构中,栈和队列是两种重要的线性数据结构.它们的主要不同在于:栈中存储的元素,是先进后出:队列中存储的元素是先进先出.我们接下来通过LinkedList集合来演示栈和队列的操作. import ...
- java 集合 Connection 栈 队列 及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- java集合详解(附栈,队列)
1 集合 1.1 为什么会出现集合框架 [1] 之前的数组作为容器时,不能自动拓容 [2] 数值在进行添加和删除操作时,需要开发者自己实现添加和删除. 1.2 Collection接口 1.2.1 C ...
- 集合第七发练习之利用ArrayList做栈、队列
栈:后进先出. 队列:先进先出. 利用这个核心思想,结合集合的add和remove方法做的栈和队列如下代码所示: 主类(t1()和t2()分别演栈和队列): package cn.hncu.myS ...
- LinkedList学习:API调用、栈、队列实现
参考的博客 Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例 如果你想详细的区了解容器知识以及本文讲的LinkedList,我推荐你去看这篇博客和这个做个的容器系列 Lin ...
- Collection集合重难点梳理,增强for注意事项和三种遍历的应用场景,栈和队列特点,数组和链表特点,ArrayList源码解析, LinkedList-源码解析
重难点梳理 使用到的新单词: 1.collection[kəˈlekʃn] 聚集 2.empty[ˈempti] 空的 3.clear[klɪə(r)] 清除 4.iterator 迭代器 学习目标: ...
- 集合类——集合输出、栈和队列及Collections集合
1.集合输出 在之前我们利用了toString()及get()方法对集合进行了输出,其实那都不是集合的标准输出,集合输出有四种方式:Iterator.ListIterator.Enumeration. ...
- Java:基于LinkedList实现栈和队列
1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit; import java.util. ...
- 采用LinkedList来模拟栈数据结构的集合--先进后出
三.用LinkedList来模拟栈数据结构的集合 /* * 自定义一个数据结构为LinkedList的集合类*/public class MyCollection_LinkedList { publi ...
随机推荐
- iOS开发系列-异常处理
概述 在开发中经常调用苹果的API遇到数组越界.实例方法不存在运行时等致命错误,此时程序直接奔溃.其实苹果是在函数内部抛出了一个异常.这样告诉开发者需要检查代码做修改.同样在我们自己封装一些框架或者功 ...
- python 通过zabbix api获得所有主机的ip
#!/usr/bin/env python3 #coding=utf-8 import jsonimport requests#from urllib import requests, parse,e ...
- python 使用字符串
字符串方法 string.digits:包含数字0-9的字符串 string.letters:包含所有字母(大写或小写)的字符串 string.lowercase:包含所有小写字母的字符串 strin ...
- day28 import,from * import *,__name__
Python之路,Day16 = Python基础16 一 module通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py"." ...
- csp-s模拟测试60
csp-s模拟测试60 2019-10-05 RT. 又颓又垃圾. 状态低迷,题都交不上去. 交了也是爆零,垃圾玩家没有什么可说的,就是垃圾. A. 嘟嘟噜 $mlogn$的毒瘤做法. 贴 ...
- JAVA 设计模式之 原型模式详解
原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式利用的是克隆的原理,创建新的对象,JDK提供的Cloneable 和JSON. ...
- Activity详解三 启动activity并返回结果 转载 https://www.cnblogs.com/androidWuYou/p/5886991.html
首先看演示: 1 简介 .如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int ...
- ASP.NET的一些概念
简述实体框架(EF): EF是一种ORM工具,ORM表示对象关联映射. 在RDMS中,对象称为表格和列对象,而在.net中(面向对象)称为类,对象以及属性. EF提供了三种方式来实现项目: l 数据库 ...
- CSDN的验证码,为什么要这样呢
总是有连着的部分
- 论文阅读笔记---HetConv
1 写在前边的话 HetConv性能:当使用HetConv取代标准卷积之后,FLOPs大概是之前的1/8到1/3,更重要的是精度几乎不变!!! 论文地址:https://arxiv.org/abs/1 ...