zoukankan      html  css  js  c++  java
  • java集合类——Stack栈类与Queue队列

    Stack继承Vector类,它通过五个操作对类 Vector 进行了扩展。 栈是 后进先出的。 栈提供了通常的 pushpop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

    方法摘要
     boolean empty()
              测试堆栈是否为空。
     E peek()
              查看堆栈顶部的对象,但不从堆栈中移除它。
     E pop()
              移除堆栈顶部的对象,并作为此函数的值返回该对象。
     E push(E item)
              把项压入堆栈顶部。
     int search(Object o)
              返回对象在堆栈中的位置,以 1 为基数。

    现附上例子,后续继续总结

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    /**
     * @作者 whs
     * @创建日期 2015年2月4日
     * @版本 V 1.0
     */
    package thread.pool;
     
    import java.util.Stack;
     
    public class StackExam {
         
        public static void main(String[] args) {
            Stack<String> stack = new Stack<String>();
            System.out.println("now the satck is "+isEmpty(stack));
            stack.push("1");
            stack.push("2");
            stack.push("3");
            stack.push("4");
            stack.push("5");
            stack.push("6");
            System.out.println("now the stack is "+isEmpty(stack));
            System.out.println(stack.peek());//查看堆栈顶部的对象,并返回该对象,但不从堆栈中移除它。
            System.out.println(stack.pop());
            System.out.println(stack.pop());
            System.out.println(stack.search("3"));//,此方法返回最近的目标对象距堆栈顶部出现位置到堆栈顶部的距离;
        }
         
        public static String isEmpty(Stack<String> stack){
            return stack.empty() ? "empty":"not empty";
        }  
    }

     输出为:

    1
    2
    3
    4
    5
    6
    now the satck is empty
    now the stack is not empty
    6
    6
    5
    2

    接口 Queue队列:

        Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。

          队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的 都是调用 remove()poll() 所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个 Queue 实现必须指定其顺序属性。

    方法摘要
     boolean add(E e)
              将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException
     E element()
              获取,但是不移除此队列的头。
     boolean offer(E e)
              将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。
     E peek()
              获取但不移除此队列的头;如果此队列为空,则返回 null
     E poll()
              获取并移除此队列的头,如果此队列为空,则返回 null
     E remove()
              获取并移除此队列的头。

           Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。

           注意:poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的。

    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Queue<String> queue=new LinkedList<String>();
    queue.offer("Hello");
    queue.offer("World!");
    queue.offer("你好?");
    System.out.println(queue.size());
    for(String str:queue){
        System.out.printf(str + "  ");
    }
    System.out.printf(" ");
    System.out.println(queue.size());
    String str;
    while((str=queue.poll()) != null){
        System.out.printf(str + "  ");
    }
    System.out.println();
    System.out.println(queue.size());

     输出结果:

    1
    2
    3
    4
    5
    3
    Hello  World !  你好? 
    3
    Hello  World !  你好? 
    0
  • 相关阅读:
    box-sizing
    js词法作用域
    焦点轮播图
    绑定事件统一方法
    自动展示收起广告功能
    使用js实现瀑布流
    回到顶部效果
    电商网站的放大镜功能
    CSS清除浮动
    CSS的水平居中和垂直居中方式
  • 原文地址:https://www.cnblogs.com/interdrp/p/8039490.html
Copyright © 2011-2022 走看看