使用LinkedList存储元素,基于LinkedList支持的方法实现自定义的队列(Queue)

Posted celineluo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用LinkedList存储元素,基于LinkedList支持的方法实现自定义的队列(Queue)相关的知识,希望对你有一定的参考价值。

  1 package com.jdk7.chapter4;
  2 
  3 import java.util.LinkedList;
  4 /**
  5  * LinkedList提供了addFirst/addLast、removeFirst/removeLast、getFirst/getLast、indexOf/lastIndexOf
  6  * 自定义的Queue则根据需要选取对应的函数,达到自定义的目的
  7  * 队列Queue从队尾进入从队首出来
  8  * @author Administrator
  9  *
 10  */
 11 public class Queue {
 12     //用来存放队列元素
 13     private LinkedList linkedList = new LinkedList();
 14     
 15     /**
 16      * 往队尾插入数据
 17      * @param obj
 18      */
 19     public void add(Object obj){
 20         linkedList.addLast(obj);
 21     }
 22     
 23     /**
 24      * 查询队首元素
 25      */
 26     public Object peek(){
 27         if(linkedList.isEmpty()){
 28             return null;
 29         }
 30         return linkedList.getFirst();
 31     }
 32     
 33     /**
 34      * 弹出队首元素
 35      * @return
 36      */
 37     public Object pop(){
 38         if(linkedList.isEmpty()){
 39             return null;
 40         }
 41         return linkedList.removeFirst();
 42     }
 43     
 44     /**
 45      * 删除队首元素是否成功
 46      * @return
 47      */
 48     public boolean remove(){
 49         if(linkedList.isEmpty()){
 50             return false;
 51         }
 52         linkedList.removeFirst();
 53         return true;
 54     }
 55     
 56     /**
 57      * 第一次出现obj的索引号
 58      * @param obj
 59      * @return
 60      */
 61     public int indexOf(Object obj){
 62         return linkedList.indexOf(obj);
 63     }
 64     
 65     /**
 66      * 最后一次出现obj的索引号
 67      * @param obj
 68      * @return
 69      */
 70     public int lastIndexOf(Object obj){
 71         return linkedList.lastIndexOf(obj);
 72     }
 73     
 74     public void clear(){
 75         linkedList.clear();
 76     }
 77     
 78     public void printLinkedList(LinkedList link){
 79         if(link==null){
 80             System.out.println("队列为空!");
 81         }
 82         System.out.print("队列所有元素为:");
 83         for(int i=0;i<link.size();i++){
 84             System.out.print(link.get(i)+" ");
 85         }
 86         System.out.println();
 87     }
 88     public static void main(String[] args) {
 89         Queue queue = new Queue();
 90         queue.add("qqqq");
 91         queue.add("wwww");
 92         queue.add("eeee");
 93         queue.add("rrrr");
 94         queue.add("tttt");
 95         queue.add("rrrr");
 96         queue.printLinkedList(queue.linkedList);
 97         System.out.println("队首元素为: "+queue.peek());
 98         System.out.println("弹出队首元素: "+queue.pop());
 99         queue.printLinkedList(queue.linkedList);
100         System.out.println("移除对首元素: "+queue.remove());
101         queue.printLinkedList(queue.linkedList);
102         System.out.println("第一次出现‘qqqq‘的索引号: "+queue.indexOf("rrrr"));
103         System.out.println("最后一次出现‘qqqq‘的索引号: "+queue.lastIndexOf("rrrr"));
104         queue.clear();
105         queue.printLinkedList(queue.linkedList);
106     }
107 }
108 
109 执行结果:
110 队列所有元素为:qqqq wwww eeee rrrr tttt rrrr 
111 队首元素为: qqqq
112 弹出队首元素: qqqq
113 队列所有元素为:wwww eeee rrrr tttt rrrr 
114 移除对首元素: true
115 队列所有元素为:eeee rrrr tttt rrrr 
116 第一次出现‘qqqq‘的索引号: 1
117 最后一次出现‘qqqq‘的索引号: 3
118 队列所有元素为:

 

以上是关于使用LinkedList存储元素,基于LinkedList支持的方法实现自定义的队列(Queue)的主要内容,如果未能解决你的问题,请参考以下文章

图解集合2:LinkedList

源码详解数据结构Linked List

LinkedList

源码详解数据结构Linked List

链式队列(Linked Queue)

ArrayList 和 LinkedList 的区别