package ListDemo; import java.util.*; /* //linkedList它内部封装的是双向链表数据结构 //每个节点是一个Node对象,Node对象中封装的是你要添加的元素,还有一个指向上一个Node对象的应用和指向下一个Node对象的引用 //不同的容器有不同的数据结构,不同的数据结果操作起来性能不同 //链表数据结构,做插入和删除的效率比较高,但查询效率低。 //数组数据结构,做查询的效率高,因为可以通过下标来直接找到元素,但插入和删除效率比较低,因为要做移位操作 */ public class LinkedListDemo1 { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("zhangsan"); linkedList.add("yangyang"); linkedList.add("mama"); linkedList.add("baba"); linkedList.addFirst("chengguo");//添加在第一个位置 linkedList.addLast("laoyao");//添加在最后一个位置 //遍历 Iterator<String> it = linkedList.iterator(); while (it.hasNext()) { String name = it.next(); System.out.println(name); } System.out.println("遍历2:"); //遍历2 for (Iterator<String> itt = linkedList.iterator(); itt.hasNext(); ) { String name = itt.next(); System.out.println(name); } System.out.println("遍历3:"); //遍历3:增强for循环 for (String s : linkedList) { System.out.println(s); } System.out.println("测试其他方法"); //linkedList.clear(); System.out.println(linkedList.removeFirst());//把第一个删除,当链表为null时,这个方法抛出异常 System.out.println(linkedList.size());//5 linkedList.clear(); System.out.println(linkedList.pollFirst());//把新的第一个删除,当链表为null时,这个方法返回null System.out.println(linkedList.size());//4 } } 2、利用LinkedList实现栈和队列
package ListDemo; import java.util.*; public class LinkedListDemo2 { public static void main(String[] args){ //实现栈,后进先出 MyStack<String> myStack=new MyStack<>(); myStack.push("zhangsan"); myStack.push("wangqiu"); myStack.push("wangwu"); System.out.println(myStack.pop()); System.out.println(myStack.pop()); Iterator<String> it=myStack.iterator(); while(it.hasNext()){ System.out.println(it.next()); } //zhangsan,先进后出 System.out.println("实现队列:先进先出"); MyQueue<Integer> myQueue=new MyQueue<>(); myQueue.push(1); myQueue.push(2); myQueue.push(3); myQueue.push(4); myQueue.push(5); myQueue.pop(); myQueue.pop(); Iterator<Integer> it2=myQueue.iterator(); while(it2.hasNext()){ System.out.println(it2.next()); } //1,2出去了,先进先出 } } class MyStack<T>{ private LinkedList<T> data=null; public MyStack(){ data=new LinkedList<>(); } //压栈 public void push(T obj){ data.addLast(obj); } //出栈 public T pop(){ return data.removeLast(); } //遍历 public Iterator<T> iterator(){ return data.iterator(); } } class MyQueue<T>{ private LinkedList<T> data=null; public MyQueue(){ data=new LinkedList<>(); } //入队 public void push(T obj){ data.addLast(obj); } //出队 public T pop(){ return data.removeFirst(); } //遍历 public Iterator<T> iterator(){ return data.iterator(); } }