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 ...
随机推荐
- Java中static、final、static final的区别【转】
说明:不一定准确,但是最快理解. final: final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final ...
- 乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁.传统的关系型数据库里边就用到了很 ...
- 【转】图像的上采样(upsampling)与下采样(subsampled)
转自:https://blog.csdn.net/stf1065716904/article/details/78450997 参考: http://blog.csdn.net/majinlei121 ...
- matlab:inv,pinv逆与伪逆
对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆 inv: inv(A)*B实际上可以写成A\BB*inv(A)实 ...
- Html5 标签一(文本)
1.html编辑器:Sublime Text 2.标签(文本) 一 Sublime Text 作用:html编辑器. 下载地址:http://www.sublimetextcn.com/ 二 文本 总 ...
- Android Studio在华为真机上运行无法输出Debug日志解决
这主要与华为手机本身的权限设置有关,解决办法请看链接地址 链接地址: https://blog.csdn.net/seafishyls/article/details/52198814
- java 面向对象基本概念
1.面向对象与面向过程 (1).都是解决问题的思维方式,都是代码组织的方式. (2).解决简单问题可以使用面向过程 (3).解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程. 2.面向对 ...
- proxy config (firefox config)
sudo apt-get install shadowsocks sudo apt-get install polipo 编辑polipo config: sudo vim /etc/polipo/c ...
- LED恒流驱动IC汇总
LED恒流驱动IC汇总 2017年09月22日 11:29:01 阅读数:569 这几天在找LED恒流驱动芯片,无意间在LED网论坛上发现这个帖子,分享给大家! LED恒流IC芯片大盘点 ...
- security相关链接整理
token令牌 ssl协议 https协议 对称加密与非对称加密 认识ASP.NET Windows身份认证