java内部有没有定义好的栈的类?

Python08

java内部有没有定义好的栈的类?,第1张

有。

数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等,java中有封装好的类,可以直接调用。

使用链表来实现栈比用数组更加方便,也易于节省空间,因为栈只能在栈顶进行操作,不需要进行随机访问栈元素。首先实现栈接口IStack,提供出栈、入栈、获取栈顶元素、判断是否为空以及清空栈等基本功能:定义一个Node类,用于保存链中点的信息。

栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

//这是JDK提供的栈

import java.util.Stack

public class UsingStack {

public static void main(String[] args) {

//构造栈对象,使用类型限制,只能存储Integer数据

Stack<Integer>s = new Stack<Integer>()

//1、2、3依次入栈

s.push(1)

s.push(2)

s.push(3)

//3、2、1依次出栈

System.out.println(s.pop())

System.out.println(s.pop())

System.out.println(s.pop())

}

}

//这是我写的顺序结构的栈

import java.util.EmptyStackException

import java.util.Vector

public class UsingStack{

public static void main(String[] args){

//构造栈对象,使用类型限制,只能存储Integer数据

MyStack<Integer>s = new MyStack<Integer>()

//1、2、3依次入栈

s.push(1)

s.push(2)

s.push(3)

//3、2、1依次出栈

System.out.println(s.pop())

System.out.println(s.pop())

System.out.println(s.pop())

}

}

/**

* 栈类

* @author developer_05

* @param <T>

*/

class MyStack<T>extends Vector<T>{

/**

* 构造方法

*/

public MyStack(){

}

/**

* 入栈方法

* @param item 待入栈的元素

* @return 返回入栈的元素

*/

public T push(T item) {

addElement(item)

return item

}

/**

* 出栈方法(同步处理)

* @return 返回出栈元素

*/

public synchronized T pop() {

T obj

int len = size()

if (len == 0)

throw new EmptyStackException()

obj = elementAt(len - 1)

removeElementAt(len - 1)

return obj

}

/**

* 判断栈是否为空的方法

* @return 返回true(栈空)或false(栈非空)

*/

public boolean empty() {

return size() == 0

}

private static final long serialVersionUID = 1L

}

存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)。\x0d\x0a\x0d\x0a栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定。\x0d\x0a\x0d\x0a局部变量的数据存在于栈内存中。\x0d\x0a\x0d\x0a栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。