【java】【集合】LinkedList的特有功能,用LinkList模擬棧和佇列資料結構

love_Aym發表於2018-04-24

一、LinkList類

1、概述:底層使用連結串列實現

2、特有功能

  • public void addFirst(E e) 及 addLast(E e)
  • public E getFirst()getLast()
  • public E removeFirst()及public E removeLast()
  • public E get(int index):因為底層是連結串列,連結串列沒有下標,需要迭代遍歷: 

       get()方法的原始碼:

if (index < (size >> 1)) {  
           Node<E> x = first;     //從頭找
           for (int i = 0; i < index; i++)  
               x = x.next;  
           return x;  
       } else {  
           Node<E> x = last;    //從尾找
           for (int i = size - 1; i > index; i--)  
               x = x.prev;  
           return x;  
       }  
   }  

注意:ArrayList底層是陣列,直接按照索引查詢元素


二、用LinkedList模擬棧、佇列資料結構

1、棧:先進後出

2、建立一個類將LinkList中的方法封裝,建立成員方法實現出棧和進棧,

進棧:addLast(),出棧:removeLast()

/**
 * 用LinkedList模擬棧結構
 */
	public static void main(String[] args) {
		//demo1();
		Stack s = new Stack();
		s.in("a");	//進棧
		s.in("b");
		s.in("c");
		s.in("d");
		
		while(!s.isEmpty()) {		//判斷棧結構是否為空
			System.out.println(s.out());    //彈棧
		}
	}

public class Stack {
		private LinkedList list = new LinkedList(); //建立LinkedList物件
		public void in(Object obj) {
			list.addLast(obj);		 //封裝addLast()方法
		}
		public Object out() {
			return list.removeLast();	 //封裝removeLast()方法
		}
		public boolean isEmpty() {
			return list.isEmpty();		 //封裝isEmpty()方法
		}
	}

2、佇列:先進先出

進棧:addLast()

出棧:removeFist()



相關文章