LinkedList是用双向链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。
底层是一个双向链表,链表擅长插入和删除操作,队列和栈最常用的2种操作都设计到插入和删除
import java.util.LinkedList; import java.util.Queue; //用linkedList模拟队列,因为链表擅长插入和删除 public class Hi { public static void main(String [] args) { //做剑指offer遇见过这个数结 Queue<String> queue = new LinkedList<String>(); //追加元素 queue.add("zero"); queue.offer("one"); queue.offer("two"); queue.offer("three"); queue.offer("four"); System.out.println(queue);//[zero, one, two, three, four] //从队首取出元素并删除 System.out.println(queue.poll());// zero System.out.println(queue.remove());//one System.out.println(queue);//[two, three, four] //从队首取出元素但是不删除 String peek = queue.peek(); System.out.println(peek); //two //遍历队列,这里要注意,每次取完元素后都会删除,整个 //队列会变短,所以只需要判断队列的大小即可 while(queue.size() > 0) { System.out.println(queue.poll()); }//two three four } }
//用linkedList模拟栈,因为链表擅长插入和删除
import java.util.Deque; import java.util.LinkedList; public class Hi { public static void main(String[] args) { /*模拟栈,这是从头开始进来的*/ Deque<String> deque = new LinkedList<String>(); /*Pushes an element onto the stack *at the head of this dequeue */ deque.push("a"); deque.push("b"); deque.push("c"); System.out.println(deque); //[c, b, a] //获取栈首元素后,元素不会出栈 System.out.println(deque.peek());//c while(deque.size() > 0) { //获取栈首元素后,元素将会出栈 System.out.println(deque.pop());//c b a } System.out.println(deque);//[] /*模拟栈*/ deque.offerLast("a"); deque.offerLast("b"); deque.offerLast("c");// [a, b, c] while(!deque.isEmpty()) System.out.println(deque.pollLast()); } // 先输出c再b最后a }
import java.util.Stack; //没有用到接口编程 public class Hi { public static void main(String[] args) { Stack<Integer> s = new Stack<Integer>(); s.push(1); s.push(2);// [1,2] s.push(3);// [1,2,3] while(!s.isEmpty()){ System.out.println(s.pop()); }//依次输入 3 接着是2 ,然后1 } }