LinkedList集合的底層是鏈表結構實現的,所以可以模擬棧(先進后出)和隊列(先進先出)。
方法:
addFirst() //添加元素到列表的起始位置
addLast() //添加元素到列表的結束位置
removeFirst() //移除列表起始位置的元素
removeLast() //移除列表結束位置的元素
getFirst() //獲取列表起始位置的元素
getLast() //獲取列表結束位置的元素
User類
1 package queue; 2 3 public class User { 4 5 private int id; 6 private String account; 7 private String password; 8 private String name; 9 10 public int getId() { 11 return id; 12 } 13 14 public void setId(int id) { 15 this.id = id; 16 } 17 18 public String getAccount() { 19 return account; 20 } 21 22 public void setAccount(String account) { 23 this.account = account; 24 } 25 26 public String getPassword() { 27 return password; 28 } 29 30 public void setPassword(String password) { 31 this.password = password; 32 } 33 34 public String getName() { 35 return name; 36 } 37 38 public void setName(String name) { 39 this.name = name; 40 } 41 42 public User() { 43 super(); 44 } 45 46 public User(int id, String account, String password, String name) { 47 super(); 48 this.id = id; 49 this.account = account; 50 this.password = password; 51 this.name = name; 52 } 53 54 @Override 55 public String toString() { 56 return "User [id=" + id + ", account=" + account + ", password=" + password + ", name=" + name + "]"; 57 } 58 59 }
構造隊列的方法類
1 package queue; 2 3 import java.util.LinkedList; 4 5 /** 6 * LinkedList模擬隊列,先進先出 7 * 8 * @author WJY 9 * 10 */ 11 public class Queue<T> { 12 13 private LinkedList<T> linkedList = new LinkedList<T>(); 14 15 /** 16 * 進隊 17 * 18 * @param t 19 * 進隊的元素 20 */ 21 public void enQueue(T t) { 22 linkedList.addLast(t); 23 } 24 25 /** 26 * 出隊 27 * 28 * @return 出隊的元素 29 */ 30 public T deQueue() { 31 return linkedList.removeFirst(); 32 } 33 34 /** 35 * 銷毀隊列 36 */ 37 public void destroyQueue() { 38 linkedList.clear(); 39 } 40 41 /** 42 * 查看隊首元素 43 * 44 * @return 隊首的元素 45 */ 46 public T queueFirst() { 47 return linkedList.getFirst(); 48 } 49 50 /** 51 * 查看隊尾元素 52 * 53 * @return 隊尾的元素 54 */ 55 public T queueLast() { 56 return linkedList.getLast(); 57 } 58 59 /** 60 * 查看隊列長度 61 * 62 * @return 隊列的長度 63 */ 64 public int queueLength() { 65 return linkedList.size(); 66 } 67 68 /** 69 * 判斷隊列是否為空 70 * 71 * @return 隊列為空 true 隊列不為空 false 72 */ 73 public boolean isEmpty() { 74 return linkedList.isEmpty(); 75 } 76 77 /** 78 * 打印隊列 79 */ 80 public String toString() { 81 return linkedList.toString(); 82 } 83 84 }
測試隊列類
1 package queue; 2 3 import list.User; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 9 User user1 = new User(1, "賬號1", "密碼1", "姓名1"); 10 User user2 = new User(2, "賬號2", "密碼2", "姓名2"); 11 User user3 = new User(3, "賬號3", "密碼3", "姓名3"); 12 User user4 = new User(4, "賬號4", "密碼4", "姓名4"); 13 User user5 = new User(5, "賬號5", "密碼5", "姓名5"); 14 15 Queue<User> queue = new Queue<User>(); 16 17 queue.enQueue(user1); 18 queue.enQueue(user2); 19 queue.enQueue(user3); 20 queue.enQueue(user4); 21 queue.enQueue(user5);// 進隊 22 23 System.out.println("隊首元素:" + queue.queueFirst()); 24 System.out.println("隊尾元素:" + queue.queueLast()); 25 System.out.println("隊列長度:" + queue.queueLength()); 26 System.out.println("隊列是否為空:" + queue.isEmpty()); 27 System.out.println(queue.toString());// 打印隊列 28 29 queue.deQueue(); 30 queue.deQueue(); 31 queue.deQueue();// 出隊 32 33 System.out.println("隊首元素:" + queue.queueFirst()); 34 System.out.println("隊尾元素:" + queue.queueLast()); 35 System.out.println("隊列長度:" + queue.queueLength()); 36 System.out.println("隊列是否為空:" + queue.isEmpty()); 37 System.out.println(queue.toString());// 打印隊列 38 39 queue.destroyQueue();// 銷毀隊列 40 41 System.out.println("隊列長度:" + queue.queueLength()); 42 System.out.println("隊列是否為空:" + queue.isEmpty()); 43 System.out.println(queue.toString());// 打印隊列 44 45 } 46 47 }
測試結果:
隊首元素:User [id=1, account=賬號1, password=密碼1, name=姓名1]
隊尾元素:User [id=5, account=賬號5, password=密碼5, name=姓名5]
隊列長度:5
隊列是否為空:false
[User [id=1, account=賬號1, password=密碼1, name=姓名1], User [id=2, account=賬號2, password=密碼2, name=姓名2], User [id=3, account=賬號3, password=密碼3, name=姓名3], User [id=4, account=賬號4, password=密碼4, name=姓名4], User [id=5, account=賬號5, password=密碼5, name=姓名5]]
隊首元素:User [id=4, account=賬號4, password=密碼4, name=姓名4]
隊尾元素:User [id=5, account=賬號5, password=密碼5, name=姓名5]
隊列長度:2
隊列是否為空:false
[User [id=4, account=賬號4, password=密碼4, name=姓名4], User [id=5, account=賬號5, password=密碼5, name=姓名5]]
隊列長度:0
隊列是否為空:true
[]
User類
1 package stack; 2 3 public class User { 4 5 private int id; 6 private String account; 7 private String password; 8 private String name; 9 10 public int getId() { 11 return id; 12 } 13 14 public void setId(int id) { 15 this.id = id; 16 } 17 18 public String getAccount() { 19 return account; 20 } 21 22 public void setAccount(String account) { 23 this.account = account; 24 } 25 26 public String getPassword() { 27 return password; 28 } 29 30 public void setPassword(String password) { 31 this.password = password; 32 } 33 34 public String getName() { 35 return name; 36 } 37 38 public void setName(String name) { 39 this.name = name; 40 } 41 42 public User() { 43 super(); 44 } 45 46 public User(int id, String account, String password, String name) { 47 super(); 48 this.id = id; 49 this.account = account; 50 this.password = password; 51 this.name = name; 52 } 53 54 @Override 55 public String toString() { 56 return "User [id=" + id + ", account=" + account + ", password=" + password + ", name=" + name + "]"; 57 } 58 59 }
構造棧的方法類
1 package stack; 2 3 import java.util.LinkedList; 4 5 /** 6 * LinkedList模擬棧,先進后出 7 * 8 * @author WJY 9 * 10 */ 11 public class Stack<T> { 12 13 private LinkedList<T> linkedList = new LinkedList<T>(); 14 15 /** 16 * 進棧 17 * 18 * @param t 19 * 進棧的元素 20 */ 21 public void push(T t) { 22 linkedList.addFirst(t); 23 } 24 25 /** 26 * 出棧 27 * 28 * @return 出棧的元素 29 */ 30 public T pop() { 31 return linkedList.removeFirst(); 32 } 33 34 /** 35 * 銷毀棧 36 */ 37 public void destroyStack() { 38 linkedList.clear(); 39 } 40 41 /** 42 * 查看棧頂元素 43 * 44 * @return 棧頂的元素 45 */ 46 public T stackFirst() { 47 return linkedList.getFirst(); 48 } 49 50 /** 51 * 查看棧底元素 52 * 53 * @return 棧底的元素 54 */ 55 public T stackLast() { 56 return linkedList.getLast(); 57 } 58 59 /** 60 * 查看棧長度 61 * 62 * @return 棧的長度 63 */ 64 public int stackLength() { 65 return linkedList.size(); 66 } 67 68 /** 69 * 判斷棧是否為空 70 * 71 * @return 棧為空 true 棧不為空 false 72 */ 73 public boolean isEmpty() { 74 return linkedList.isEmpty(); 75 } 76 77 /** 78 * 打印棧 79 */ 80 public String toString() { 81 return linkedList.toString(); 82 } 83 84 }
測試棧類
1 package stack; 2 3 import list.User; 4 5 public class Test { 6 7 public static void main(String[] args) { 8 9 User user1 = new User(1, "賬號1", "密碼1", "姓名1"); 10 User user2 = new User(2, "賬號2", "密碼2", "姓名2"); 11 User user3 = new User(3, "賬號3", "密碼3", "姓名3"); 12 User user4 = new User(4, "賬號4", "密碼4", "姓名4"); 13 User user5 = new User(5, "賬號5", "密碼5", "姓名5"); 14 15 Stack<User> stack = new Stack<User>(); 16 17 stack.push(user1); 18 stack.push(user2); 19 stack.push(user3); 20 stack.push(user4); 21 stack.push(user5);// 進棧 22 23 System.out.println("棧頂元素:" + stack.stackFirst()); 24 System.out.println("棧底元素:" + stack.stackLast()); 25 System.out.println("棧長度:" + stack.stackLength()); 26 System.out.println("棧是否為空:" + stack.isEmpty()); 27 System.out.println(stack.toString());// 打印棧 28 29 stack.pop(); 30 stack.pop(); 31 stack.pop();// 出棧 32 33 System.out.println("棧頂元素:" + stack.stackFirst()); 34 System.out.println("棧底元素:" + stack.stackLast()); 35 System.out.println("棧長度:" + stack.stackLength()); 36 System.out.println("棧是否為空:" + stack.isEmpty()); 37 System.out.println(stack.toString());// 打印棧 38 39 stack.destroyStack();// 銷毀棧 40 41 System.out.println("棧長度:" + stack.stackLength()); 42 System.out.println("棧是否為空:" + stack.isEmpty()); 43 System.out.println(stack.toString());// 打印棧 44 45 } 46 47 }
測試結果:
棧頂元素:User [id=5, account=賬號5, password=密碼5, name=姓名5]
棧底元素:User [id=1, account=賬號1, password=密碼1, name=姓名1]
棧長度:5
棧是否為空:false
[User [id=5, account=賬號5, password=密碼5, name=姓名5], User [id=4, account=賬號4, password=密碼4, name=姓名4], User [id=3, account=賬號3, password=密碼3, name=姓名3], User [id=2, account=賬號2, password=密碼2, name=姓名2], User [id=1, account=賬號1, password=密碼1, name=姓名1]]
棧頂元素:User [id=2, account=賬號2, password=密碼2, name=姓名2]
棧底元素:User [id=1, account=賬號1, password=密碼1, name=姓名1]
棧長度:2
棧是否為空:false
[User [id=2, account=賬號2, password=密碼2, name=姓名2], User [id=1, account=賬號1, password=密碼1, name=姓名1]]
棧長度:0
棧是否為空:true
[]