java数据结构之java实现栈
importjava.util.Arrays;
/**
*栈的实现<br>
*@authorSkip
*@version1.0
*/
publicclassStack<T>{
privateintsize; //栈中元素的个数
privateObject[]arr; //底层数组
privatefinalintdefaultLength=200; //默认长度
/**
*无参构造,使用默认长度初始化数组
*/
publicStack(){
arr=newObject[defaultLength];
size=0;
}
/**
*使用长度参数初始化数组
*@paramlength长度
*/
publicStack(intlength){
arr=newObject[length];
size=0;
}
/**
*入栈
*@paramelement数据
*/
publicvoidpush(Telement){
//是否需要扩容
if(size>=arr.length){
//数组扩容
extendCapacity(size+1);
}
arr[size++]=element;
}
/**
*出栈
*@return数据
*/
@SuppressWarnings("unchecked")
publicTpop(){
//元素个数为0,无法执行出栈操作
if(size==0){
returnnull;
}
Tt=(T)arr[size-1];
arr[--size]=null; //数据已出栈,还原为null
returnt;
}
/**
*清空栈
*/
publicvoidclear(){
for(inti=0;i<size;i++){
arr[i]=null;
}
size=0;
}
/**
*获得当前栈中元素的个数
*@return元素的个数
*/
publicintgetSize(){
returnsize;
}
/**
*判断是否为空栈
*@return空为true,非空为false
*/
publicbooleanisEmpty(){
returnsize==0;
}
/**
*打印栈中所有的元素
*/
@SuppressWarnings("unchecked")
publicvoidprintStack(){
for(inti=0;i<size;i++){
System.out.print(((T)arr[i]).toString());
}
System.out.println();
}
/**
*扩容
*@paramlength需要的长度
*/
privatevoidextendCapacity(intlength){
//当前数组长度和需要的长度取最大
intminCapacity=Math.max(arr.length,length);
//判断是否需要扩容
if(minCapacity-arr.length>0){
//数组长度增加一半
intnewLength=arr.length+arr.length/2;
//如果新的长度还比需求要小,将需求的长度作为数组长度
if(newLength<minCapacity){
newLength=minCapacity;
}
//数组长度不能超过Integer.Max_Value
if(newLength>Integer.MAX_VALUE-8){
newLength=Integer.MAX_VALUE;
}
//数组扩容
arr=Arrays.copyOf(arr,newLength);
}
}
}
相关文章
- JAVA多线程面试题_java多线程的实现方式
- java mediatype utf-8_Java MediaType.APPLICATION_JSON_UTF8屬性代碼示例
- java简单的除法运算_Java除法运算的陷阱[通俗易懂]
- java打印数组_Java中打印数组的三种方式
- java工作流_Java 实现简单工作流
- 数据结构——栈(顺序栈)——Java
- java验证手机号正则表达式_Java使用正则表达式验证手机号和电话号码的方法「建议收藏」
- JAVA实验室设备管理系统代码_java做一个简单学生管理系统
- Java数组循环_java遍历object数组
- Java 代码审计基础知识 — java反射机制
- 【数据结构】之队列的java实现(一)详解编程语言
- Java数据结构和算法(三)——冒泡、选择、插入排序算法详解编程语言
- 服务器实现Java远程访问Linux服务器(java远程linux)
- Linux调用Java实现编程快速开发(linux调用java)
- 使用Java设置Redis密码(redis密码java)
- Java脚本实现Linux系统的登录(java登录Linux)
- Java如何查询MySQL?25字(java查询mysql)
- Java运行在Linux系统上免费下载(linux java下载)
- Java工程师集MySQL技能于一身(java工程师mysql)
- 管理Linux下Java版本管理:轻松实现多版本切换(linux下java版本)
- 在Linux上实现Java程序的运行(linux运行java程序)
- Linux上善用Java:实现智能开发(linux 运行java)
- Linux测试搭配Java快速实现稳定性验证(linux测试java)
- Oracle数据库中调用Java实现可扩展应用程序(oracle内嵌java)
- 如何在Linux系统中安装Java(linux中安装java)
- 实现Java认证让你离Oracle更近一步(java认证oracle)
- Java程序建立Oracle数据库表的实现方式(java建oracle表)
- Java导入Oracle 实现快速数据传输(java导入oracle)
- 数据库Java编程修改Oracle数据库的实践(java修改oracle)