先進(jìn)先出(FIFO)和先進(jìn)后出(LIFO)是數(shù)據(jù)結(jié)構(gòu)中常見(jiàn)的兩種算法思路,也被廣泛應(yīng)用于各種領(lǐng)域的軟件開(kāi)發(fā)中。在Java中,這兩種算法也有對(duì)應(yīng)的實(shí)現(xiàn)方式。
// 先進(jìn)先出隊(duì)列示例 Queue<Integer> queue = new LinkedList<>(); queue.offer(1); queue.offer(2); queue.offer(3); System.out.println(queue.poll()); // 輸出1 System.out.println(queue.poll()); // 輸出2 System.out.println(queue.poll()); // 輸出3 // 先進(jìn)后出棧示例 Deque<Integer> stack = new ArrayDeque<>(); stack.push(1); stack.push(2); stack.push(3); System.out.println(stack.pop()); // 輸出3 System.out.println(stack.pop()); // 輸出2 System.out.println(stack.pop()); // 輸出1
以上示例中,F(xiàn)IFO的實(shí)現(xiàn)方式是使用Java中的Queue接口及其實(shí)現(xiàn)類LinkedList來(lái)實(shí)現(xiàn)的,先進(jìn)入隊(duì)列的元素會(huì)被先取出。而LIFO的實(shí)現(xiàn)方式則是使用Java中的Deque接口及其實(shí)現(xiàn)類ArrayDeque,使用push方法入棧,使用pop方法出棧,后入棧的元素會(huì)被先彈出。
在實(shí)際應(yīng)用中,F(xiàn)IFO一般用于任務(wù)調(diào)度、網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)葓?chǎng)景;而LIFO則常用于undo/redo、瀏覽器歷史記錄等場(chǎng)景。