LinkedList源码及学习:Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
Java怎么使用栈和队列:java中栈和队列的实现和API用法
// 代码实现
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(2);
list.add(4);
System.out.println();
System.out.println("-----------遍历方式-------------");
// 使用foreach遍历LinkedList列表效率会远远高于for循环,说明其内部实现不是简单的for循环
for(Integer tmp: list) {
System.out.print(tmp + " ");
}
System.out.println();
for(Iterator<Integer> it = list.iterator(); it.hasNext();) {
System.out.print(it.next() + " ");
}
System.out.println();
System.out.println("-------------------------------");
System.out.println("------------与队列中等价的方法-----------");
LinkedList<Integer> queue = new LinkedList<>();
int arr1[] = {1, 3, 5, 2, 4};
for(int i = 0; i < 5; ++i) {
queue.offer(arr1[i]);
}
System.out.println(queue.size());
// 也可以用类似双端队列的方法
System.out.println(queue.getFirst() + " " + queue.getLast());
while(!queue.isEmpty()) {
// 返回队头
int top = queue.peek();
//删除并返回队头
top = queue.poll();
System.out.print(top + " ");
}
System.out.println();
System.out.println("-------------------------------");
System.out.println("------------与栈中等价的方法-----------");
LinkedList<Integer> stack = new LinkedList<>();
int arr2[] = {1, 3, 5, 2, 4};
for(int i = 0; i < 5; ++i) {
stack.push(arr2[i]);
}
System.out.println(stack.size());
while(!stack.isEmpty()) {
// 返回栈顶
int top = stack.peek();
//删除并返回栈顶
top = stack.pop();
System.out.print(top + " ");
}
System.out.println();
System.out.println("-------------------------------");
// 其他方法的使用类似ArrayList
}
}
另外,对于Java中实现的Stack类,较LinkedList多了一个serach(Object obj)方法,返回元素obj在栈中从栈底向栈顶方向的位置数,即将栈容器中得高度,元素不存在则返回-1。
两者对于栈操作其实是没有很大的效率差别的,通过比较源码,当进行push元素时,Stack相当于O(1)的时间,而LinkedList也是相当于O(1)的时间,其源码操作就是将新节点插入到header节点的下一位置。当进行peek和pop时,也是上述的细微区别。
继续加油~