• java集合类——Stack栈类与Queue队列


    今日走读代码时,遇到stack栈类,特查看java的API文档,总结如下:

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

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

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

    /**
     * @作者 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";
    	}	
    }
    

     输出为:

    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值是不合法的。

    例子:

    		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()); 
    

     输出结果:

    3
    Hello  World !  你好?  
    3
    Hello  World !  你好?  
    0
    
  • 相关阅读:
    ZOJ 1002 Fire Net (火力网)
    UVa OJ 117 The Postal Worker Rings Once (让邮差只走一圈)
    UVa OJ 118 Mutant Flatworld Explorers (变体扁平世界探索器)
    UVa OJ 103 Stacking Boxes (嵌套盒子)
    UVa OJ 110 MetaLoopless Sorts (无循环元排序)
    第一次遇到使用NSNull的场景
    NSURL使用浅析
    从CNTV下载《小小智慧树》
    NSDictionary and NSMutableDictionary
    Category in static library
  • 原文地址:https://www.cnblogs.com/whsa/p/4272717.html
Copyright © 2020-2023  润新知