Java 数组实现 stack
首先定义 IStack
package cn.com.example.stack; /**
* Created by Jack on 2017/3/8.
*/
public interface IStack<T> { //元素出栈,并返回出栈元素
public T pop() throws IllegalAccessException; //元素入栈
public void push(T element); //获取栈顶元素
public T peek() throws IllegalAccessException; //判断栈是否为空
public boolean isEmpty(); // 栈大小
public int size(); public void clear();
}
接着定义 MyStack 实现 IStack接口 并测试
package cn.com.example.stack; import java.util.Arrays; /**
* Created by Jack on 2017/3/8.
*/
public class MyStack<T> implements IStack { private final int DEFAULT_SIZE = 3;
private int size = 0;
private int capacity = 0; //top指向下一个能够添加元素的位置
private int top = 0;
private Object[] array; public MyStack() {
this.capacity = this.DEFAULT_SIZE;
this.array = new Object[this.capacity];
this.size = 0;
} public MyStack(int capacity) {
this.capacity = capacity;
this.array = new Object[this.capacity];
this.size = 0;
} /**
* 元素出栈,并返回出栈元素
*
* @return
*/
@Override
public Object pop() throws IllegalAccessException {
if (this.size == 0)
throw new IllegalAccessException("stack element empty");
T element = (T) this.array[top - 1];
this.array[top - 1] = null;
this.size--;
this.top--;
return element;
} /**
* 元素入栈
*
* @param element
*/
@Override
public void push(Object element) {
if (this.size < this.capacity) {
this.array[this.top] = element;
this.top++;
this.size++;
} else {
// 扩容
enlarge();
push(element);
}
} private void enlarge() {
this.capacity = this.capacity + this.DEFAULT_SIZE;
Object[] newArray = new Object[this.capacity];
System.arraycopy(array, 0, newArray, 0, array.length);
Arrays.fill(array, null);
this.array = newArray;
} /**
* 获取栈顶元素
*
* @return
*/
@Override
public Object peek() throws IllegalAccessException {
if (this.size == 0)
throw new IllegalAccessException("stack element empty");
return this.array[this.top - 1];
} /**
* 判断栈是否为空
*
* @return
*/
@Override
public boolean isEmpty() {
return size == 0;
} /**
* 获取栈大小
*
* @return
*/
@Override
public int size() {
return size;
} /**
* 清空 栈
*/
@Override
public void clear() {
Arrays.fill(array, null);
this.capacity = this.DEFAULT_SIZE;
this.array = new Object[this.capacity];
this.size = 0;
this.top = 0;
}
} class MyStackTest {
public static void main(String[] args) throws IllegalAccessException {
MyStack<String> stack = new MyStack<String>(); stack.push("1"); // 栈头
System.out.println(stack.peek()); // 栈头出栈
System.out.println(stack.pop()); // 是否为空
System.out.println(stack.isEmpty()); System.out.println(stack.size()); for (int i = 1; i <= 10; i++) {
stack.push("" + i);
} System.out.println(stack.size()); for (int i = 0; i < 10; i++) {
String s = (String) stack.pop();
System.out.println(s);
} // 清空
//stack.clear(); System.out.println("size = " + stack.size());
}
}
输出
1
1
true
0
10
10
9
8
7
6
5
4
3
2
1
size = 0
Java 数组实现 stack的更多相关文章
- Java数组你知多少?
下面我带大家一起加深一下对Java数组的认识: 1.理解数组 数组也是一种数据类型,本身就是一种引用类型,我们从它的初始化方法,通过关键字new去完成定义及初始化就可以知道. 数组的长度是不变的,一旦 ...
- Java数组操作的10大方法
转载自码农网 译文链接:http://www.codeceo.com/article/10-java-array-method.html 英文原文:Top 10 Methods for Java Ar ...
- Java数组!!!你知多少?
这是一篇网上搜到的文章,对数组进行了充分的说明.楼主懂了数组的俩种初始化方式:静态初始化和动态初始化方式.(贴过来备用哦) 下面我带大家一起加深一下对Java数组的认识: 1.理解数组 数组也是一种数 ...
- Java-杂项:Java数组Array和集合List、Set、Map
ylbtech-Java-杂项:Java数组Array和集合List.Set.Map 1.返回顶部 1. 之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊 ...
- Java数组深入
Java数组深入 内存中的数组 前边提到:数组是一种引用类型,数组引用变量只是一个引用,当它指向有效内存的时候才可以通过数组变量来访问数组元素,也就是说数组变量和数组元素在内存中是分开放的. 可以这么 ...
- 五分钟学Java:打印Java数组最优雅的方式是什么?
在逛 Stack Overflow 的时候,发现了一些访问量像安第斯山一样高的问题,比如说这个:打印 Java 数组最优雅的方式是什么?访问量足足有 220W+,想不到啊,这么简单的问题竟然有这么多 ...
- Java 数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如numbers[100 ...
- 第5章 Java数组
1.什么是数组 数组可以想象成一个巨大的盒子,这个盒子里面存放的是同一个数据类型的数据 例如:int[] scores = {78,68,94,93}; 2.如何使用Java中的数组 2.1申明数组 ...
- Java 数组基础
数组 数组(Array):相同类型数据的集合. 定义数组 方式1(推荐,更能表明数组类型) type[] 变量名 = new type[数组中元素的个数]; 比如: int[] a = new int ...
随机推荐
- 分布式爬虫之elasticsearch基础6(bluk)
上篇文章介绍了在es里面批量读取数据的方法mget,本篇我们来看下关于批量写入的方法bulk. bulk api可以在单个请求中一次执行多个索引或者删除操作,使用这种方式可以极大的提升索引性能. bu ...
- JAVA 第七周学习总结
20175308 2018-2019-2 <Java程序设计>第七周学习总结 教材学习内容总结 本周学习第八章:常用实用类 String类: String类位于java.lang包中,被定 ...
- ubuntu 安装json
命令行中输入:sudo apt-get install libjsoncpp-dev
- cc攻击和ddos攻击的区别和攻防 + 调SYN连接参数
1.一个是WEB网络层拒绝服务攻击(DDoS),一个是WEB应用层拒绝服务攻击(CC),网络层就是利用肉鸡的流量去攻击目标网站的服务器,针对比较本源的东西去攻击,服务器瘫痪了,那么运行在服务器上的网站 ...
- golang 转换markdown文件为html
使用blackfriday go get -u gopkg.in/russross/blackfriday.v2 go: package markdown import ( "fmt&quo ...
- 截取字符串中最后一个中文词语(MS SQL)
有朋友需求一个问题,就是处理一张表中某一字段,从这个字段中去截取内容中最后一个中文词语. ID SourceText Result 1 张达:U:1杨英苹:U:1,周忱:U:1,;苗桥:U:1,章玮: ...
- [Oracle]如何在Oracle中设置Event
为了调查Oracle 的故障,可以通过设置event ,来了解详细的状况.方法如下: ■ 如果使用 SPFILE, =============To enable it: 1. Check the cu ...
- [JDBC]你真的会正确关闭connection吗?
Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DriverManag ...
- Flask_admin 笔记六 modelView的内置方法
增加model后端Flask-Admin对与之配合的数据库模型做了一些假设. 如果要实现自己的数据库后端,并且Flask-Admin的模型视图仍可按预期工作,则应注意以下事项:1) 每一个model必 ...
- Vue中axios访问 后端跨域问题
public class AllowOriginFilter implements Filter { @SuppressWarnings("unused") public void ...