java.util.Stack类简介 :
http://blog.csdn.net/a19881029/article/details/9408649
Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来
Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用,Stack本身通过扩展Vector而来,而Vector本身是一个可增长的对象数组( a growable array of objects)那么这个数组的哪里作为Stack的栈顶,哪里作为Stack的栈底?
查看Stack源码:
//Stack
public class Stack extends Vector
{
public Stack()
{
}
//推obj入栈
public Object push(Object obj)
{
addElement(obj);
return obj;
}
//返回栈顶数据,并移除
public synchronized Object pop()
{
int i = size();
Object obj = peek();
removeElementAt(i - 1);
return obj;
}
//返回栈顶数据,不移除
public synchronized Object peek()
{
int i = size();
if(i == 0)
throw new EmptyStackException();
else
return elementAt(i - 1);
}
//是否为空
public boolean empty()
{
return size() == 0;
}
//返回离栈顶最近的obj的位置,不存在返回-1
public synchronized int search(Object obj)
{
int i = lastIndexOf(obj);
if(i >= 0)
return size() - i;
else
return -1;
}
private static final long serialVersionUID = 1224463164541339165L;
}
结构:
测试:
package test;
import java.util.Stack;
public class testStack {
public static void main(String[] args) {
Stack<String> ts = new Stack<String>();
System.out.println("======is empty:"+ts.empty());
ts.push("1");
ts.push("5");
ts.push("2");
ts.push("3");
ts.push("2");
ts.push("4");
System.out.println("======peek:"+ts.peek());
System.out.println("======size after peek:"+ts.size());
System.out.println("======search not exists:"+ts.search(2));
System.out.println("======search exists:"+ts.search("2"));
System.out.println("======peek:"+ts.pop());
System.out.println("======size after pop:"+ts.size());
}
}
结果:
======is empty:true
======peek:4
======size after peek:6
======search not exists:-1
======search exists:2
======peek:4
======size after pop:5
- 大小: 19.8 KB
分享到:
相关推荐
有多种方法可以查看 Java Stack 的信息,包括使用 `jstack` 命令、使用 `kill` 命令和使用 Java VisualVM 工具。 Thread Dump 信息可以帮助开发者排查程序中的性能瓶颈和诊断程序中的死锁和其他问题。
用java实现的栈Stack类,不继承任何集合类,用对象数组实现
本节将详细介绍如何使用Java实现Stack以及相关测试案例。 首先,我们可以通过继承java.util.ArrayList或java.util.Vector类来创建自定义的Stack。ArrayList提供了快速随机访问和高效插入删除元素的能力,而Vector是...
本文将深入讨论Java中继承的优缺点,以及在特定情况下如何避免使用继承,同时探讨`java.util.Stack`类的设计问题。 继承是面向对象编程中的一个核心概念,主要目的有三个:代码重用、规范制定和实现多态。通过继承...
Stack提供了`push()`方法用于压栈(添加元素到顶部),`pop()`方法用于弹栈(移除并返回顶部元素),`peek()`方法用于查看但不移除顶部元素,以及`empty()`方法用于检查栈是否为空。 **Map** 是一个键值对(key-...
本示例程序旨在通过显式的方法,也就是不依赖Java内置的`java.util.Stack`类,来实现一个自定义的栈。下面我们将深入探讨这个“JAVA 模拟 STACK”作业的相关知识点。 首先,栈的基本操作包括: 1. **压栈(Push)**:...
在提供的示例代码中,我们首先创建了一个Stack对象`stack`,然后使用`push()`方法依次将整数11111、字符串"absdder"和双精度浮点数29999.3压入栈中。通过`printStack()`方法打印出栈的状态。接着,我们使用`search...
堆栈(stack)是 Java 中的一种先进后出的数据结构,通常用于保存方法(函数)中的参数和局部变量。在 Java 中,所有基本类型和引用类型都在栈中存储。栈中的数据生存空间一般在当前 scopes 内(即由 {…} 括起来的...
在本示例中,“stack java演示小代码”指的是一个使用Java编写的程序,该程序展示了如何操作和使用栈来执行各种操作。下面我们将深入探讨与这些文件名相关的知识点。 首先,`StackAppletTest.java`可能是一个测试类...
5. **代码实现**:在`Stack3 java.doc`文档中,通常会包含Java源代码的详细解释和实现,包括如何创建堆栈对象,如何使用堆栈方法以及如何实现回文检测逻辑。此文档可能还包括如何编译和运行代码的说明。 综上所述,...
JAVA Stack 是一个内置的数据结构,它是 Java 核心库 `java.util` 包的一部分,用于实现后进先出(LIFO)数据结构。Stack 的设计基于 Vector 类,因此它具有线程安全的特性,因为大部分操作都是同步的。这意味着在多...
此外,为了获取Java层与Native层的交互信息,可能还需要使用`JavaVM*`接口中的`AttachCurrentThread`和`GetStackTrace`方法。 当我们涉及到内核空间时,处理call stack的方式又有所不同。在Linux内核中,我们可以...
java中stack(栈)的使用代码实例 java中stack(栈)是一种常用的数据结构,作为Vector的子类,java中的Stack类提供了栈的基本操作方法。下面是java中stack(栈)的使用代码实例。 Stack类的继承关系 java中的...
本文对 JAVA 中的 Vector 和 Stack 进行了深入分析,介绍了它们的基本特点、结构、使用方法和基本操作。 Vector 和 Stack 都是重要的数据结构,了解它们的特点和使用方法可以帮助开发者更好地使用它们。
- **函数调用**:Java虚拟机(JVM)使用栈来处理方法调用。每次函数调用都会在栈上创建一个新的帧,用于存储局部变量、参数和返回地址。当函数返回时,对应的帧从栈中弹出。 - **内存管理**:垃圾收集器在确定对象...
- **函数调用**:Java的JVM在处理方法调用时,使用了运行时栈帧来存储局部变量、操作数栈等信息。 - **括号匹配**:在编译器设计中,栈常用于检查表达式中的括号是否配对正确。 - **深度优先搜索(DFS)**:...
1. 创建一个`Stack`类:可以使用Java内置的`java.util.Stack`类,或者自定义一个栈类,例如`MyArrayStack.java`。自定义栈类时,可以使用数组或链表作为底层数据结构,包含`push`、`pop`、`peek`(查看栈顶元素但不...
在Java编程语言中,堆栈(Stack)和队列(Queue)是两种基本的数据结构,它们在处理数据存储和操作时扮演着重要角色。本文将深入探讨如何使用链表(LinkedList)来实现这两种数据结构。 首先,让我们了解堆栈和队列...
Java `ArrayDeque` 是一个高效且灵活的双端队列实现,它可以用来替代传统的 `Stack` 类来实现栈的功能。`ArrayDeque` 在 Java 6 中被引入,并且它实现了 `Deque` 接口,同时也实现了 `Queue` 接口的部分方法。与 `...