java堆栈面试题一般有哪些?

TheDisguiser 2020-09-04 09:10:12 java常见问答 8761

我们都知道,堆栈是java的底层原理,是面试里面试官最喜欢问的问题之一,本篇文章我们就来了解些它们的面试题。

一、什么是堆栈?

类似于队列,堆栈是个简单的数据存储结构。堆栈中数据进出的顺序很重要,举个例子,餐厅的盘子堆,盘子洗完要堆到上面,而不是插到下面的某个位置(相信不会有人那么做)。当厨师要用到盘子时从最上面的开始拿。即最先放在堆里的盘子会被最后一个用到。

定义:堆栈就是只能在一端插入和删除数据的链表,这个端就叫做栈顶(top),最后一个添加的数据第一个被删除。因此,这也叫后进先出(LAST IN FIRST OUT)链表或是先进后出链表(FIRST IN LAST OUT)。

具体的大家可以通过下面的文章来进行了解:java堆栈图解

二、堆栈有什么作用?

用new创建的对象在堆区,函数中的临时变量在栈区,Java中的字符串在字符串常量区。

栈:存放进本数据类型的数据和对象的引用,但对象本身不存在栈中,而是存放在堆中。

堆:存放new产生的数据。 静态域:存放在对象中用static定义的静态成员。

常量池:存放常量

非RAM存储:硬盘等永久存储空间。

三、堆栈的区别是?

堆区(Heap):

堆区中存放的是对象以及每个对象对应的class的信息,其中存放class

的信息主要是获取类的操作指令,jvm只有一个堆区,被所有线程共享,堆中不存放基本

类型和对象引用,只存放对象本身。

栈区(Stack):

每个线程包含一个栈区,占中只保存基础数据类型的对象和自定义对象引用(不

是对象),对象都存放在堆区中;每个栈区中的数据(原始类型和对象引用)都是私有的,

其他栈不能访问;栈分为三个部分:基本类型变量区、执行环境上下文、操作指令区(存放

操作指令)。栈区由编译器自动分配释放,存放函数的参数值,局部变量的值等

具体的大家可以通过下面的文章来进行了解: java堆栈区别在哪?

题目:下面请通过代码实现简略实现下堆栈

public class Stack
{
    int[] data;
    int maxSize;
    int top;
    public Stack(int maxSize)
    {
        this.maxSize = maxSize;
        data = new int[maxSize];
        top = -1;
    }
    /**
     * 依次加入数据
     * @param data 要加入的数据
     * @return 添加是否成功
     */
    public boolean push(int data)
    {
        if (top + 1 == maxSize)
        {
            System.out.println("栈已满!");
            return false;
        }
        this.data[++top] = data;
        return true;
    }
    /**
     * 从栈中取出数据
     * @return 取出的数据
     */
    public int pop() throws Exception
    {
        if (top == -1)
        {
            throw new Exception("栈已空!");
        }
        return this.data[top--];
    }
    public static void main(String[] args) throws Exception
    {
        Stack stack = new Stack(1000);
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        while (stack.top >= 0)
        {
            System.out.println(stack.pop());
        }
    }
}

以上就是本篇文章的所有内容,需要了解更多面试题的话,就赶快来看看我们的java面试宝典吧。

推荐阅读:

java堆排序代码,堆排序实现

java栈存放什么?java堆存放什么?

堆排序优点是什么?堆排序缺点又是什么?