栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java、泛型栈(Java8版本)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java、泛型栈(Java8版本)

本程序定义了一个泛型栈,可对不同的对象元素进行相同的入栈、出栈、获取栈顶元素、输出栈操作。


package pack2;

public class GenericStack {
	private Object[] obj;	//栈数组
	private int size;		//栈的实际大小
	private int DEFAULT_CAPACITY = 16;	//栈的默认容量
	

	public GenericStack() {	//创建一个具有默认容量的栈
		super();
		obj = new Object[DEFAULT_CAPACITY];
	}


	public GenericStack(int capacity) {	//创建一个具有正整数容量的栈
		super();
		if(capacity < 0) {
			System.out.println("The capacity should be greater than zero");
			System.exit(1);
		}
		
		obj = new Object[capacity];
	}
	

	public void push(T o) {	//入栈
		if(size >= obj.length) {	//如果实际大小>=栈数组的长度,数组扩容
			Object[] temp = new Object[size + (int)(size * 1.5)];  
                                     //创建一个|原实际大小+原实际大小一半|的数组
			System.arraycopy(obj, 0, temp, 0, size);	//调用方法进行数组内容复制
			obj = temp;		//temp数组的引用赋给obj
		}
		
		obj[size++] = o;
	}
	

	@SuppressWarnings("unchecked")
	public T pop() {	//出栈
		if(isEmptyStack()) {	//判断是否栈空
			System.out.println("This is an empty stack, so cannot pop");
			System.exit(2);
		}
		
		return (T)obj[--size];	//--size 先自减在调用
	}
	

	@SuppressWarnings("unchecked")
	public T peak() {	//获取栈顶元素
		if(isEmptyStack()) {
			System.out.println("This is an empty stack, so cannot peak");
			System.exit(3);
		}
		
		return (T)obj[size-1];	//size-1 为数组中栈顶元素的下标
	}
	

	public boolean isEmptyStack() {	//返回栈是否空的布尔值
		return size == 0;
	}
	

	public void printStack() {	//输出栈(后进先出)
		for (int i = size-1; i >= 0; i--) 
			System.out.print(obj[i]+" ");
		
		System.out.println();
	}


	public int getSize() {	//返回栈的实际大小
		return size;
	}
}

测试程序如下:

package pack2;

public class TestGenericStack {

	public static void main(String[] args) {
		GenericStack stack1 = new GenericStack<>();
		stack1.push("Name");
		stack1.push("China");
		stack1.push("America");
		stack1.push("Japanese");
		System.out.print("The data of stack1 is ");
		stack1.printStack();
		System.out.println("The size of stack1 is "+stack1.getSize());
		
		stack1.pop();
		System.out.print("After pop, the new data of stack1 is ");
		stack1.printStack();
		System.out.println("After pop, the new size of stack1 is "+stack1.getSize());
		
		
		GenericStack stack2 = new GenericStack<>(10);
		
		for (int i = 0; i < 20; i++) {
			stack2.push(i);
		}
		
		System.out.print("nThe data of stack2 is ");
		stack2.printStack();
		System.out.println("The size of stack2 is "+stack2.getSize());
		
		for (int i = 0; i < 20; i++) {
			stack2.pop();
		}
		System.out.println("After pop, the new size of stack2 is "+stack2.getSize());
		stack2.pop();
	}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号