import java.util.Collection;
import java.util.NoSuchElementException;
public class ArrayStack<E> {
private int initalSize = 5;
private Object[] stack;
private int head;
private int tail;
public ArrayStack() {
initialize(null);
}
public ArrayStack(int newcapacity){
if (newcapacity < this.initalSize)
throw new IllegalArgumentException("The new capacity is too small!");
initalSize = newcapacity;
initialize(null);
}
public ArrayStack(E[] items) {
initialize(items);
}
public ArrayStack(Collection<E> collection) {
initialize(collection.toArray());
}
private void initialize(Object[] items){
if (items == null || items.length == 0){
stack = new Object[initalSize];
head = 0;
tail = 0;
}
else{
stack = new Object[items.length + 1];
System.arraycopy(items, 0, stack, 0, items.length);
head = items.length;
tail = 0;
}
}
@SuppressWarnings("unchecked")
public E pop(){
if (size() == 0)
throw new NoSuchElementException();
if (head == 0)
head = stack.length;
Object ret = stack[--head];
loseWeight();
return (E)ret;
}
public void push(E item){
increaseWeight();
stack[head++] = item;
if (head == stack.length)
head = 0;
}
@SuppressWarnings("unchecked")
public E peek(){
if (size() == 0)
throw new NoSuchElementException();
if (head == 0)
return (E)stack[stack.length - 1];
else
return (E)stack[head-1];
}
public boolean isEmpty(){
return (size() == 0);
}
public int size(){
return head >= tail ? head - tail : head + stack.length - tail;
}
public boolean increaseWeight(){
if (size() == stack.length - 1){
Object[] newStack = new Object[stack.length * 2];
System.arraycopy(stack, 0, newStack, 0, stack.length);
stack = newStack;
return true;
}
return false;
}
public boolean loseWeight(){
if (size() == stack.length / 4){
Object[] newStack = new Object[stack.length/2];
if (head >= tail){
System.arraycopy(stack, tail, newStack, 0, size());
}
else{
System.arraycopy(stack, tail, newStack, 0, stack.length-tail);
System.arraycopy(stack, 0, newStack, stack.length-tail, head);
}
tail = 0;
head = size();
return true;
}
return false;
}
}
//本篇文章来源于csdn论坛:http://topic.csdn.net/u/20100201/21/8abd9e46-c84c-4ba1-bf28-3a8ed907bd94.html
原文链接http://edu.codepub.com/2009/1003/16063.php
分享到:
相关推荐
java螺旋数组源码java螺旋数组源码java螺旋数组源码
java 部分数组递增排序 java 部分数组递增排序 java 部分数组递增排序
纯手写 java 数组模拟链表约瑟夫环问题 有很大更改空间 仅供参考
java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组
Java-用数组实现栈-队列-线性列表(最详细) 有注释 适合java新生 进行数组的练习 3个数据结构的数组实现练习
java用数组实现的约瑟夫环问题。代码简单易懂。
详解java多维数组,提高对java多维数组的理解
使用数组构建ATM,采用的是面向对象的设计方法。
java 数组递增排序 java 数组递增排序 java 数组递增排序
JAVA新手写的ATM系统,高手就略了,只用了数组存放数据,用循环实现ATM功能结构.刚入门的JAVA新手可以看看,活用数组与循环语法
java中数组的各种用法,工程中以代码的形式,例举java中数组的应用,对初学者有帮助,大鸟就不要看了
写的Java文件中实现了统计数组中相同元素个数的功能以及统计数组中小于某个元素的所有元素的数量功能,非常的实用。
Java数组阶段的选择题、填空题、编程题、判断题都有,适合想自己测试下的学生以及准备出题的老师
使用链式编程写法实现Java中byte数组的拼接。例如byte[] bytes = ByteUtils.get().add(0x41).add(07).add(11).add("15288930000").add(0x45).toArray();更灵活用法请参考Mybytes
47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组中元素的最大值.zip47.java求数组...
主要介绍了Java实现字符数组全排列的方法,涉及Java针对字符数组的遍历及排序算法的实现技巧,需要的朋友可以参考下
树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3.java 使用java实现树状数组3....
//声明一个整形数组 //声明一个字符串类型的数组 //创建数组 //声明数组的同时进行创建 //初始化数组 //循环为整型数组赋值 //循环输出整型数组中的元素 //求整形数组的累加和 //定义整形数组 //从键盘接收数据,...
Educoder题目:Java入门 - 数组进阶答案解析
Java数组在内存分配方面的知识;Java数组的静态特征;对于数组变量而言,一定要区分它何时是数组变量,何时代表数组对象本身。