- 浏览: 387604 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (213)
- 面试题目 (9)
- 设计模式 (7)
- Core Java (28)
- 杂记 (10)
- 代码模板 (6)
- 数据库 (6)
- oracle plsql (2)
- strut2 study note (1)
- Oracle Database 10g SQL开发指南学习笔记 (7)
- Unix.Shell编程(第三版) 学习笔记 (1)
- Servlet (1)
- Hibernate (1)
- 敏捷开发 (1)
- Linux (13)
- Velocity (1)
- webx (1)
- Svn (2)
- 页面html,css (2)
- English (4)
- Astah usage (1)
- UML与设计思考 (2)
- JavaScript (3)
- 读书 (4)
- 好的网址 (1)
- 网址 (0)
- JMS (1)
- 持续集成环境 (1)
- 生活 (1)
- Spring (3)
- Tomcat Server (1)
- MySQL (2)
- 算法与数据结构 (6)
- Oracle数据库 (1)
- 分布式计算 (1)
- Maven (1)
- XML (2)
- Perl (2)
- 游戏 (1)
最新评论
-
chen_yi_ping:
请问楼主,怎么测试?String filePath = arg ...
使用多线程模拟多用户并发访问一个或多个tomcat,测试性能 -
adam_zs:
好,谢谢分享。
ArrayDeque实现Stack的功能 -
zjfgf:
int.class==Integer.class 返回fals ...
Class study -
kimmking:
xslt太难写的。
在java中调用xls格式化xml
在J2SE6引入了ArrayDeque类,它继承了Deque(双向队列)接口,使用此类可以自己实现java.util.Stack类的功能,去掉了java.util.Stack的多线程同步的功能。
例如创建一个存放Integer类型的Stack,只要在类中创建一个ArrayDeque类的变量作为属性,之后定义的出栈、入栈,观察栈顶元素的操作就直接操作ArrayDeque的实例变量即可。
import java.util.ArrayDeque; import java.util.Deque; public class IntegerStack { private Deque<Integer> data = new ArrayDeque<Integer>(); public void push(Integer element) { data.addFirst(element); } public Integer pop() { return data.removeFirst(); } public Integer peek() { return data.peekFirst(); } public String toString() { return data.toString(); } public static void main(String[] args) { IntegerStack stack = new IntegerStack(); for (int i = 0; i < 5; i++) { stack.push(i); } System.out.println(stack); System.out.println("After pushing 5 elements: " + stack); int m = stack.pop(); System.out.println("Popped element = " + m); System.out.println("After popping 1 element : " + stack); int n = stack.peek(); System.out.println("Peeked element = " + n); System.out.println("After peeking 1 element : " + stack); } }
//java.util.ArrayDeque的源码: private transient E[] elements; private transient int head; private transient int tail; /*此处存放e的位置是从elements数组最后的位置开始存储的*/ public void addFirst(E e) { if (e == null) throw new NullPointerException(); elements[head = (head - 1) & (elements.length - 1)] = e;//首次数组容量默认为16,head=(0-1)&(16-1)=15 if (head == tail) doubleCapacity(); } /*每次扩容都按插入的先后顺序重新放入一个新的数组中,最新插入的放在数组的第一个位置。*/ private void doubleCapacity() { assert head == tail; int p = head; int n = elements.length; int r = n - p; // number of elements to the right of p int newCapacity = n << 1; if (newCapacity < 0) throw new IllegalStateException("Sorry, deque too big"); Object[] a = new Object[newCapacity]; System.arraycopy(elements, p, a, 0, r); System.arraycopy(elements, 0, a, r, p); elements = (E[])a; head = 0; tail = n; } public E removeFirst() { E x = pollFirst(); if (x == null) throw new NoSuchElementException(); return x; } public E pollFirst() { int h = head; E result = elements[h]; // Element is null if deque empty if (result == null) return null; elements[h] = null; // 重新设置数组中的这个位置为null,方便垃圾回收。 head = (h + 1) & (elements.length - 1);//将head的值回退,相当于将栈的指针又向下移动一格。例如,12--〉13 return result; } public E peekFirst() { return elements[head]; // elements[head] is null if deque empty }
发表评论
-
Log4j常用配置
2011-08-29 22:03 1681log4j.rootLogger=INFO, normal ... -
Java的clone()方法,浅复制与深复制
2011-08-15 15:06 1403要想实现克隆,需要实 ... -
LinkedList源码分析
2011-08-10 15:18 1075http://blog.csdn.net/zhouyong0/ ... -
Java nio(文件读写 实例解析)
2011-08-09 18:07 4688http://blog.csdn.net/biexf/arti ... -
深入探讨 Java 类加载器
2011-08-08 15:23 777http://www.ibm.com/developerwor ... -
Java.nio 与Java.io的比较
2011-08-05 18:00 1494http://blogs.oracle.com/slc/ent ... -
java缓冲读写
2011-08-05 15:54 1105public static void main(String[ ... -
java多线程写入同一文件
2011-08-05 15:40 10040转自 :http://www.update8.com/Prog ... -
java线程及ComcurrentHashMap
2011-08-04 13:55 991http://blog.csdn.net/dimly113/a ... -
HashMap源码分析
2011-08-04 13:51 1821public class HashMap<K,V&g ... -
HashMap与HashTable的区别、HashMap与HashSet的关系
2011-08-04 10:44 3431转自http://blog.csdn.net/wl_ldy/a ... -
JVM内存模型及垃圾收集策略解析
2011-07-18 23:16 1324http://blog.csdn.net/dimly113/a ... -
Java关键字final、static使用总结
2011-06-03 12:47 9http://java.chinaitlab.com/base ... -
Java关键字final、static使用总结
2011-06-03 12:47 8一、final 根据程序上下文环境,Java关键字fina ... -
Java关键字final、static使用总结
2011-06-03 12:46 5一、final 根据程序上下文环境,Java关键字fina ... -
Java关键字final、static使用总结
2011-06-02 16:20 0转自:http://java.chinaitlab.com/b ... -
Java关键字final、static使用总结
2011-06-02 16:20 818转自:http://java.chinaitlab.com/b ... -
Java关键字final、static使用总结
2011-06-02 16:19 2转自:http://java.chinaitlab.com/b ... -
protected访问级别详解
2011-05-12 14:42 1681首先阅读:http://download.oracle.com ... -
ddfccf
2011-05-11 09:42 0sdfds
相关推荐
Java `ArrayDeque` 是一个高效且灵活的双端队列实现,它可以用来替代传统的 `Stack` 类来实现栈的功能。`ArrayDeque` 在 Java 6 中被引入,并且它实现了 `Deque` 接口,同时也实现了 `Queue` 接口的部分方法。与 `...
如果对性能有特殊需求,开发者还可以自定义栈的实现,例如使用ArrayList或LinkedList,并添加特定的方法来实现栈的功能。 总的来说,Java提供了多种方式来实现栈这一数据结构,每种实现都有其特点和适用场景。了解...
在Android应用开发中,"安卓实现stack的回退和activitygroup的结合"是一个常见的需求,尤其是在构建具有复杂导航结构的应用时。Stack(堆栈)是一种数据结构,它遵循后进先出(LIFO,Last In First Out)的原则,...
总结来说,Java提供了多种方式来实现和使用栈,无论是简单的`ArrayDeque`还是传统的`Stack`类,都能满足不同场景下的需求。栈作为一种基础数据结构,其灵活性和效率使其在编程中扮演着至关重要的角色。通过熟练掌握...
本程序的"汪秋云 MyStack.java"很可能是一个自定义的栈实现,可能包含了`push`和`pop`等基本操作,以及一些额外的功能,例如检查栈是否为空、获取栈的大小等。代码中可能会使用数组或者链表作为底层数据结构,并通过...
- **基本操作**:Java中,`java.util.Stack`类实现了堆栈功能,提供了`push()`(压栈)、`pop()`(出栈)、`peek()`(查看顶部元素)等方法。 - **实现方式**:堆栈通常用数组或链表实现。Java的`Stack`类底层是...
Java提供了一个内置的`java.util.Stack`类来实现栈的功能。 栈的基本操作包括: 1. **压栈(push)**:将一个元素添加到栈顶。 2. **弹栈(pop)**:移除并返回栈顶的元素。如果栈为空,则抛出`EmptyStackException...
在Java编程语言中,`LinkedList` 是一个常用的集合类,它实现了`List`接口,并且提供了额外的功能,如双端操作。本篇文章将探讨如何利用`LinkedList`来实现队列和栈这两种数据结构,以及其背后的原理和源码分析。 #...
2. **继承自Vector**:Stack不是独立实现的,而是基于Vector,因此它具备了Vector的所有功能,包括扩容、线程安全等特性。 3. **数据结构**:虽然Stack的数据结构基于数组,但是与ArrayList不同,Stack的push和pop...
1. 栈:后进先出(LIFO)的数据结构,Java中可以使用ArrayDeque或Stack类实现。 2. 队列:先进先出(FIFO)的数据结构,Java提供了LinkedList或ArrayBlockingQueue等实现。 3. 堆:可以理解为部分有序的树形数据结构...
对于栈的需求,`Deque`接口(尤其是`ArrayDeque`)提供了更高效且功能丰富的实现。 总之,虽然`Vector`和`Stack`在Java早期版本中广泛使用,但在现代Java编程中,考虑到性能和设计模式的改进,开发者通常会选择更...
在Java中,我们可以使用Java Collections Framework提供的Stack类,它实现了上述的栈接口,但需要注意的是,Java的Vector类在实现Stack类时并没有遵循栈的先进后出原则,而是基于数组的动态数组实现,所以它实际上是...
队列是一种先进先出(FIFO)的数据结构,Java的LinkedList或ArrayDeque类也可实现队列功能。 7. **树**: 树是一种分层数据结构,其中每个节点可能有零个或多个子节点。二叉树是最常见的类型,每个节点最多有两个...
在压缩包中的“数据结构代码java实现”可能包含了以上所有数据结构的Java源代码,每一种数据结构都会有一个独立的类,类中会有对应的方法来实现数据结构的功能。初学者可以通过阅读和运行这些代码,加深对数据结构的...
Java中的`LinkedList`类实现了`List`接口,提供了双向链表的功能。你可以通过`add()`方法在链表的末尾添加元素,`addFirst()`和`addLast()`分别用于在开头和末尾添加,`get()`用于获取指定位置的元素,而`remove()`...
比如,`ArrayList`和`LinkedList`对应数组和链表,`Stack`和`Queue`接口及其实现类如`ArrayDeque`提供了栈和队列功能,`HashMap`和`HashSet`实现了哈希表和无序集合,`TreeMap`和`TreeSet`则基于红黑树实现有序映射...
在P2P聊天应用的设计中,我们可以使用Stack来实现消息历史的浏览功能,用户可以通过不断地pop操作回溯聊天记录。同时,Queue可以用于实现消息的发送队列,新接收到的消息会被enqueue,然后在合适的时候被dequeued并...
Deque<Character> stack = new ArrayDeque(); for (int i = 0; i (); i++) { if (pattern.contains(input.charAt(i))) { stack.push(input.charAt(i)); } else if (!stack.isEmpty() && isPair(stack.peek(), ...
Java的ArrayDeque或Stack类可以实现栈。 4. **队列**:队列是一种先进先出(FIFO)的数据结构,通常有入队(enqueue)和出队(dequeue)两个操作。Java的Queue接口和LinkedList可以用来实现队列。 5. **堆**:堆是...
Java的`java.util.Deque`接口提供了此类功能,常见的实现有`ArrayDeque`。 最后,堆是一种特殊的树形数据结构,通常用于优先队列,其中每个父节点的值都小于或等于其子节点。虽然这里没有明确的堆实现文件,但Java...