Java集合之队列和栈

Java集合之队列和栈

队列Queue

Queue是Java中的一个接口,继承自Collection接口。

public interface Queue<E> extends Collection<E> {
    boolean add(E e); //向队尾添加元素
    boolean offer(E e); //向队尾添加元素
    E remove();  //移除队头元素
    E poll(); //移除队头元素
    E element();//返回队头元素,但不移除队头元素。如果队列是空的,抛出异常
    E peek(); 返回队头元素,但不移除队头元素。如果队列是空的,返回null
}

 

offer方法和add方法的区别:

offer方法——{@code true} if the element was added to this queue, else {@code false}

add方法——<tt>true</tt> if this collection changed as a result of the call(如果添加元素成功,则返回true,否则,不会返回false,而是抛出异常)(返回值总是true)

已知的子接口和实现类

All Known Subinterfaces:

BlockingDeque<E>, BlockingQueue<E>, Deque<E>, TransferQueue<E>

All Known Implementing Classes:

AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList, LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, SynchronousQueue

Queue本身是一种先入先出的模型(FIFO),和我们日常生活中的排队模型很类似。根据不同的实现,他们主要有数组和链表两种实现形式。

数组形式:

09122454_aLvf.jpg

 

链表形式:

09122454_DDJ4.jpg

 

双端队列Deque

继承自接口Queue。是一个双端队列,双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的数据结构。双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行。

双端队列可以在队列任意一端入队和出队。此外,经常还会有一个查看(Peek)操作,返回该端的数据而不将其出队。

package java.util;


public interface Deque<E> extends Queue<E> {
   
    void addFirst(E e);
    void addLast(E e);
    boolean offerLast(E e);
    E removeFirst();
    E removeLast();
    E pollFirst();
    E pollLast();
    E getFirst();
    E getLast();
    E peekFirst();
    E peekLast();
    boolean removeFirstOccurrence(Object o);
    boolean removeLastOccurrence(Object o);

    // *** Queue methods ***
    boolean add(E e);
    boolean offer(E e);
    E remove();
    E poll();
    E element();
    E peek();

    // *** Stack methods ***
    void push(E e);
    E pop();
    
    // *** Collection methods ***
    boolean remove(Object o);
    boolean contains(Object o);
    public int size();
    Iterator<E> iterator();
    Iterator<E> descendingIterator();
}

 

已知的子接口和实现类

All Known Subinterfaces:

BlockingDeque<E>

All Known Implementing Classes:

ArrayDeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList

 

阻塞队列BlockingQueue

详见:http://my.oschina.net/xinxingegeya/blog/298999

 

阻塞双端队列BlockingDeque

这既是一个双端队列,具有双端队列的操作,也具有阻塞队列的特性

 

栈Stack

同步容器Vector在java 中可以实现自动增长的对象数组

栈是一种先进后出的模式。由源码可见,Java栈Stack继承自同步容器Vector

package java.util;

public class Stack<E> extends Vector<E> {
    /**
     * Creates an empty Stack.
     */
    public Stack() {
    }

    //向栈顶压入元素
    public E push(E item) {
        addElement(item);
        return item;
    }
    
    //移除栈顶元素
    public synchronized E pop() {
        E       obj;
        int     len = size();
        obj = peek();
        removeElementAt(len - 1);
        return obj;
    }

    //返回栈顶元素
    public synchronized E peek() {
        int     len = size();

        if (len == 0)
            throw new EmptyStackException();
        return elementAt(len - 1);
    }

   //判断栈是否为空
    public boolean empty() {
        return size() == 0;
    }

    //查找栈中的元素
    public synchronized int search(Object o) {
        int i = lastIndexOf(o);

        if (i >= 0) {
            return size() - i;
        }
        return -1;
    }
    
    private static final long serialVersionUID = 1224463164541339165L;
}

=====END====

转载于:https://my.oschina.net/xinxingegeya/blog/299515

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值