栈的操作一般有:判断是否为空;清空栈;查看栈的长度;进栈;出栈;
首先定义一个栈的类
public class MyStack<T> {
private Object[] objects = new Object[100];
private int size = 0;
// 是否为空
public boolean isEmpty() {
if (size == 0) {
return true;
} else {
return false;
}
}
// 清空栈
public void clear() {
if (size > 0) {
for (int i = 0; i < size; i++) {
objects[i] = null;
}
}
size = 0;
}
// 栈长度
public int length() {
return size;
}
// 扩充数组
@SuppressWarnings("unused")
private void kuochong() {
Object[] objects1 = new Object[size * 2 + 1];//新建一个新的对象数组,对象长度为开始对象数组长度的2倍加1;
// Object[] objects1= new Object[objects.length*3/2+1];
for (int i = 0; i < size; i++) {
objects1[i] = objects[i];//依次将初始数组赋值
objects[i] = null;//并清空初始对象
}
objects = objects1;//重新将新数组赋值给初始对象;
}
// 进栈
public void push(T date) {
if(size>=objects.length)//如果数组长度不够,就要扩充数组;
{
kuochong();
}
objects[size] = date;
size++;
}
// 出战
@SuppressWarnings("unchecked")
public T pop() {
if (size == 0) {
return null;
} else {
Object object = new Object();
object = objects[size - 1];
size = size - 1;
return (T) object;
}
}
}
定义了一个测试数据的类,
public class Duixiang {
private String name;
private int age;
public Duixiang() {
super();
}
public Duixiang(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
下面就是测试了
public class Mian {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyStack<Duixiang> stack=new MyStack<Duixiang>();//定义一个栈对象
long start = System.currentTimeMillis(); //程序开始时间;
//进栈
System.out.println("进栈:::");
System.out.println("进栈开始时的长度:::"+stack.length());//输出进栈开始的长度
for (int i = 0; i < 10000000; i++) {
Duixiang duixiang = new Duixiang("name"+i, i%10+20);//创建一个测试数据对象;
System.out.println("姓名:::"+duixiang.getName()+";年龄:"+duixiang.getAge());
stack.push(duixiang);//进展操作;
System.out.println(stack.length()+"");//输出当前栈的长度
}
System.out.println("进栈结束时的长度:::"+stack.length());//输出进栈结束时的长度
long temp = System.currentTimeMillis(); //进栈完成时间;
System.out.println("push time: " + (temp - start)); //进栈所用的时间
//下面是出栈
System.out.println("出栈:::");
while(stack.length()>0){
Duixiang duixiang=new Duixiang();
duixiang=stack.pop();
stack.pop();
System.out.println(stack.length()+"");
System.out.println("姓名:::"+duixiang.getName()+";年龄:"+duixiang.getAge());
}
System.out.println("pop time: " + (System.currentTimeMillis() - temp)); //出栈所用时间
}
}