前几天有一个学C#的同学去一家公司面试,面试官给出了这样一道题:用C#代码实现一个自己的栈.
后来他打电话过来问我,由于我学的就是java,不过以前也对C#有点接触,语言都是相通的,我只是给他描述了下大概的思路,呵呵......
其实学过java的程序员都知道,Java中提供了另一个Stack对象,就是一个栈,但是后来自己想想,如果是我我能否用Java实现一个自己的栈呢?带着这个疑问就自己写了一个,也算是对自己的一个简单的考验吧,没准下次我去面试就遇上了这样的题目,那不是太幸运了,呵呵(想的美...).这篇文章留下来给自己当做笔记使用,也希望对路过的初学者有点帮助。
package com.rao.util;
import java.util.EmptyStackException;
import java.util.Stack;
public class MyStack<E> {
private E[] eleDates; //数组对象
private int topIndex; //最上一个元素(栈顶元素)的下标
private int count; //元素的个数
public MyStack(int size) {
this.eleDates = (E[])new Object[size]; //初始化数组长度
this.topIndex=-1; //初始化最后一个元素的下边
this.count = 0; //初始化元素的个数
}
public MyStack() {
this(10); //提供一个默认的构造函数,默认初始化数组的长度只能装10个元素
}
//压入
public void push(E obj){
if (isFull()) {
throw new ArrayIndexOutOfBoundsException("栈已经满了,不能再放入元素");
}else {
count++; //栈中元素的个数+1
this.eleDates[++topIndex]=obj; //在最后一个元素的后面增加当前元素
}
}
//弹出栈,并且弹出栈顶元素
public E pop(){
if (isEmpty()) {
throw new EmptyStackException();
}else {
count--; //栈中元素的个数-1
E movedObj = this.eleDates[topIndex];
this.eleDates[topIndex]=null; //设置被移除的对象为空
topIndex--; //栈的元素下标-1
return movedObj;
}
}
//弹出栈顶元素
public E peek(){
if (isEmpty()) {
throw new EmptyStackException();
}else {
return this.eleDates[topIndex];
}
}
//判断栈是否为空
public boolean isEmpty(){
return this.topIndex==-1;
}
//判断栈是否已满
public boolean isFull(){
return this.topIndex==(this.eleDates.length-1);
}
//获取栈的长度
public int getStackSize(){
return this.eleDates.length;
}
// 获取栈中元素的个数
public int getStackCount(){
return this.count;
}
@Override
public String toString() {
String stackString = "";
for (int i = 0; i < eleDates.length; i++) {
if (eleDates[i]!=null) {
stackString+=eleDates[i]+" | ";
}
}
return stackString;
}
public static void main(String[] args) {
MyStack<Integer> myStack = new MyStack<Integer>(5);
myStack.push(2);
myStack.push(100);
myStack.push(5);
myStack.push(12);
myStack.push(33);
System.out.println(myStack);
System.out.println(myStack.pop());
System.out.println(myStack);
System.out.println(myStack.pop());
System.out.println(myStack);
System.out.println(myStack.pop());
System.out.println(myStack);
}
}
运行结果:
2 | 100 | 5 | 12 | 33 |
33
2 | 100 | 5 | 12 |
12
2 | 100 | 5 |
5
2 | 100 |
参考文献:java 源代码;
分享到:
相关推荐
跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题 面试题库 高吞吐低延迟Java应用的垃圾回收优化....
跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题库 高吞吐低延迟Java应用的垃圾回收优化.docx 黑马...
跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题 面试题库 高吞吐低延迟Java应用的垃圾回收优化....
java后端面试题答案.pdf Java并发Fork-Join框架原理解析.docx JAVA核心知识整理.pdf JAVA核心知识点整理.pdf Java面试笔记.docx JAVA面试题解惑系列.pdf Java面试题(基础).pdf JVM 实用参数系列 - v1.0.pdf JVM与...
主要介绍了Java实现栈和队列的面试题,每个例题代码实现非常详细,每一个方法讲解也很到位,特别适合参加Java面试的朋友阅读。
请写一个java程序实现线程连接池功能? 44.给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一...
内容概要:本书从近一百套最新一线互联网公司面试题中精选而出,涵盖Java架构面试所有技术栈,包 括JVM,Mysql,并发,Spring,Mybatis,Redis,MQ,Zookeeper,Netty, Dubbo,Spring Boot,Spring Cloud,数据结构...
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104055970
这 500 多道面试题,都是目前主流企业使用最高频的面试题库,也都是 Java 版本升级之后,重新整理归纳的最新答案,会让面试者少走很多不必要的弯路。同时每道题都做到了详尽的描述,以确保每个阶段的读者都能看得懂...
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为...
Java虚拟机(JVM)面试题(总结最全面的面试题!!!) 文章目录Java内存模型我们开发人员编写的Java代码是怎么让电脑认识的为什么说java是跨平台语言Jdk和Jre和JVM的区别说一下 JVM由那些部分组成,运行流程是什么...
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为...
前端面试题班级-班级系统-班级系统源码-班级管理系统-班级管理系统java代码-班级系统设计与实现-基于springboot的班级系统-基于Web的班级系统设计与实现-班级网站-班级网站代码-班级平台-班级平台代码-班级项目-班级...
java面试题饮食分享-饮食分享平台-饮食分享平台源码-饮食分享平台java代码-饮食分享平台设计与实现-基于springboot的饮食分享平台-基于Web的饮食分享平台设计与实现-饮食分享网站-饮食分享网站源码-饮食分享网站java...
答:多形:一个类中多个同名方法。继承:子类继承父类。 jsp内置对象? 答:request 用户端请求 response 回应 pageContext 网页属性 session 会话 out 输出 page 当前网页 exception 错误网页 application ...
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...
面试题 2021.4.10 英礡Improbable笔试题 (2021 Improbable Intern Online Test) 括号匹配 约瑟夫环 2021.03.31 华为校园招聘软件笔试题 2021.3.31 兴业数金Java校园招聘笔试试卷(cibfintech) 2021.3.29 网易2021校招...
⑦一个类可以实现多个接口,但只能继承一个抽象类。 ⑧接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用。 2.Java 虚拟机的运行时数据区有...