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 ...
随机推荐
- C# 语法二 值类型引用类型
1.值类型 2.引用类型 一 值类型 值类型存放在栈中,引用类型存放在堆中. 值类型有:数值.布尔.字符,例如:int i;bool i2;char cr='a'; 二 引用类型 大多数类型是引用类型 ...
- 【Codeforces 464D】World of Darkraft - 2
Codeforces 464 D 首先我们知道这K个装备是互不干扰的,就是说如果一个装备升级了或者卖掉了,不会对其它装备的挣到的钱产生任何影响.所以我们就考虑单独处理某一个装备挣到的钱. 那么就设\( ...
- Android ScrollView和ListView联用,且ListView可以下拉刷新和上拉加载
ScrollView嵌套listView且ListView可以实现上拉加载. 由于代码太长,在此只提供实现思路: 先不说上拉加载的事,咱们先回想一下,ScrollView和LsitView联用,时的解 ...
- 轻量级WebApi请求插件:PostMan
时间很宝贵,废话不多说,只说三句,如下: 十年河东,十年河西,莫欺骚年穷!~_~ 打错个字,应该是莫欺少年穷! 学历代表你的过去,能力代表你的现在,学习代表你的将来. 学无止境,精益求精. 本次介绍的 ...
- 51nod 1295 XOR key 可持久化01字典树
题意 给出一个长度为\(n\)的正整数数组\(a\),再给出\(q\)个询问,每次询问给出3个数,\(L,R,X(L<=R)\).求\(a[L]\)至\(a[R]\)这\(R-L+1\)个数中, ...
- asp.net core使用jexus部署在linux无法正确 获取远程ip的解决办法
asp.net core程序部署在centos7(下面的解决方案,其他系统都能使用,这里只是我自己部署在centos7),使用服务器jexus进行部署,AppHost模式. 因为请求是由jexus进行 ...
- KVM虚拟机管理——资源调整
1. 概述2. 计算资源调整2.1 调整处理器配置2.2 调整内存配置3. 存储资源调整3.1 根分区扩展3.2 添加磁盘4. 网络资源调整 1. 概述 KVM在使用过程中,会涉及到计算(CPU,内存 ...
- MySQL数据库服务器(YUM)安装
1. 概述2. 部署过程2.1 虚拟机console的NFS服务端配置2.2 虚拟机node15的NFS客户端配置2.3 虚拟机安装MySQL环境2.4 配置MySQL3. 错误及解决3.1 启动失败 ...
- 一个很好用的在线编辑、展示、分享、交流JavaScript 代码的平台
在发表博客时,有一些代码只能粘贴进去,而不能看到代码运行的效果,需要读者把代码粘贴进自己的编辑器,然后再运行看效果,这是一件很耗时的事情 在平时百度的时候,我发现一些网站可以在线预览功能,而且可以在线 ...
- 从源码的角度看 React JS 中批量更新 State 的策略(上)
在之前的文章「深入理解 React JS 中的 setState」与 「从源码的角度再看 React JS 中的 setState」 中,我们分别看到了 React JS 中 setState 的异步 ...