代码如下:
import java.util.AbstractList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.RandomAccess; public class Stack<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ private static final long serialVersionUID = 1L; private Object[] elementData; private int size; private int length; public Stack(int length) { this.length = length; elementData = new Object[this.length]; } public Stack() { this(10); } private void rangeCheck(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); } } public void ensureCapacity(int minCapacity) { int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { int newCapacity = (oldCapacity * 3)/2 +1; if (newCapacity < minCapacity) { newCapacity = minCapacity; elementData = Arrays.copyOf(elementData, newCapacity); } } } public boolean push(E e) { ensureCapacity(size + 1); elementData[size++] = e; return true; } public E pop() { rangeCheck(size - 1); E result = (E)elementData[--size]; elementData[size] = null; return result; } public boolean isEmpty() { return elementData == null || size == 0; } public E top() { rangeCheck(size - 1); return (E)elementData[size - 1]; } @Override public E get(int index) { throw new UnsupportedOperationException("can not get"); } @Override public int size() { return size; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public Iterator<E> iterator() { return new stackIterator(); } private class stackIterator implements Iterator<E> { @Override public boolean hasNext() { return size > 0; } @Override public E next() { return (E)elementData[--size]; } @Override public void remove() { throw new UnsupportedOperationException("can not get"); } } }
逻辑不复杂,小技巧是:重写 public Iterator<E> iterator() 方法。
测试类如下:
public class StackTest { public static void main(String[] args) { Stack<Integer> st = new Stack<Integer>(); for (int i = 0; i < 10; i++) { st.push(i); } for (int i = 0; i < 10; i++) { Integer val = st.pop(); //Integer val = st.top(); System.out.print(val); System.out.print('\t'); } for (Integer val : st) { System.out.print(val); System.out.print('\t'); } } }
相关推荐
Java作为一种广泛使用的编程语言,提供了多种方式来实现堆栈,包括使用数组、链表以及内置的java.util.Stack类。下面我们将详细讨论如何在Java中实现堆栈,并探讨其相关知识。 首先,我们可以通过自定义一个类来...
"Java 中堆(heap)和堆栈(stack)的区别" Java 中堆(heap)和堆栈(stack)是两个不同的内存区域,分别用于存储不同的数据类型和对象。堆栈(stack)是 Java 中的一种内存区域,用于存储基本类型的变量和对象的...
在Java编程语言中,Stack是一个内置的类,它位于java.util包下,专门用于实现堆栈数据结构。堆栈遵循“后进先出”(LIFO,Last In First Out)的原则,即最后压入栈的元素最先被弹出。这个类是Vector类的子类,因此...
标题中的"Stack3 java.rar_Stack3 java_palindrome"表明这是一个关于使用Java编程语言实现堆栈(Stack)数据结构,并且应用在判断回文(Palindrome)字符串上的项目。回文是指正读反读都能读通的字符串,如“level”...
数据结构-Java中实现一个简单的堆栈结构Stack,通过数组实现堆栈数据结构,简单易懂,适合数据结构初学者学习理解堆栈的原理实现。
- **基本操作**:Java中,`java.util.Stack`类实现了堆栈功能,提供了`push()`(压栈)、`pop()`(出栈)、`peek()`(查看顶部元素)等方法。 - **实现方式**:堆栈通常用数组或链表实现。Java的`Stack`类底层是...
在Android系统中,理解和分析调用堆栈(call stack)对于开发者来说至关重要,尤其是在调试和性能优化时。本文将深入探讨如何在Android环境下为不同语言(C语言、C++、Java以及内核空间)添加并打印调用堆栈信息。 ...
`Stack`类是Java集合框架的一部分,提供了push、pop、peek等方法来操作元素,这与JVM内部的堆栈机制有相似之处,但请注意,`Stack`类并不等同于JVM的堆栈,它更多地是一种数据结构的实现。 通过分析这个演示程序,...
这个过程可以通过自定义一个Stack类或者使用Java的java.util.Stack类来实现。通过这样的方法,我们能有效地解析和计算复杂的数学表达式。 总结起来,Java中的堆栈实现不仅可以帮助我们解决括号匹配问题,还能在编译...
在Java中,`java.util.Stack` 类提供了对堆栈操作的支持,但它实际上是基于`Vector`类实现的,而不是链表。然而,为了理解链表如何实现堆栈,我们可以自己创建一个基于`java.util.LinkedList` 的堆栈类。`LinkedList...
本文将详细讲解如何使用Java中的LinkedList类来模拟这两种数据结构,并实现其基本操作。 堆栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构,它遵循“先进后出”的原则。常见的堆栈操作有压栈...
在Java编程中,堆栈是一种基于“后进先出”(LIFO)原则的数据结构,常用于实现递归、表达式求值等场景。本文将详细介绍如何利用Java的堆栈数据结构来实现简单的四则运算。 四则运算,即加法(+)、减法(-)、乘法...
在深入探讨打印Java堆栈的方法之前,我们先来理解一下什么是Java堆栈以及为何需要打印它。Java堆栈是Java虚拟机(JVM)的一部分,主要用于存储方法调用的局部变量、操作数栈、动态链接信息和返回地址等。当一个方法...
要查看C/C++代码的堆栈信息,可以使用`adblogcat`命令,并结合`ndk-stack`来获取具体的堆栈调用情况。具体命令格式如下: ```bash adb logcat | ndk-stack -sym ``` 其中,`<path_to_symbol_directory>`是指向...
在给定的压缩包文件"VoIP using SIP and Java.pdf"中,可能会详细介绍如何使用Java和SIP协议来构建一个VoIP应用程序,包括代码示例、配置指南和最佳实践。通过阅读这份文档,你可以深入理解VoIP和SIP的原理,以及...
Java 堆栈详解 Java 是一种广泛使用的面向对象的编程语言,它的内存管理机制是其强大特性的关键部分。在 Java 中,内存分为两个主要区域:堆(Heap)和栈(Stack)。本文将深入探讨Java堆栈的概念、工作原理以及...
- 在Java中,可以使用`java.util.Stack`类来实现堆栈操作,包括`push()`(压入元素)、`pop()`(弹出顶部元素)、`peek()`(查看顶部元素但不移除)和`empty()`(检查堆栈是否为空)等方法。 - `Stapel.java`可能...
这是使用java写的对于一个数学表达式字符串的分析与求解,使用的是int类型,对各种正确的输入都能有正确的输出,使用了stack来解决,希望能对大家有所帮助
1. **初始化SIP Stack**:使用`javax.sip.SipFactory`创建SIP堆栈实例,然后设置参数,如监听端口、协议类型(UDP/TCP/TLS)等。 2. **创建SIP会话**:通过SIP堆栈创建`javax.sip.SipContext`对象,它代表了SIP会话...