LinkedList总结+数组栈Stack
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
#LiskedList-> public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable
##構(gòu)造器
- public LinkedList(Collection<? extends E> c)
- public LinkedList() 很熟悉的樣子,比ArrayList少了個初始化大小的方法,想想很容易啊,這個是鏈表,容易擴(kuò)大小,不是數(shù)組!
特點: - 快速失敗機(jī)制. - Linkedist是由鏈表實現(xiàn)的,只不過Java中將引用替換成了指針到達(dá)了同樣的效果,當(dāng)然,用面向?qū)ο髞韺慛ode節(jié)點比原來大一用面向過程寫的那個鏈表容易很多。 - 從源代碼可以看出,LinkedList采用尾查法來插入元素。 - 實現(xiàn)了clone接口何序列化,使用很方便! - 雙向鏈表查找index位置的節(jié)點時,有一個加速動作:若index < 雙向鏈表長度的1/2,則從前向后查找; 否則,從后向前查找。(插入,刪除快的原因)
##鏈棧,鏈隊,鏈雙向隊列 ###列子
@Testpublic void test1() {LinkedList<Integer> list = new LinkedList<>();list.add(1);list.add(2);list.add(3);System.out.println(list);// get,add,remove first都是對隊首的操作!/* list.addFirst(4);System.out.println(list);System.out.println(list.getFirst());System.out.println(list.removeFirst());System.out.println(list);*/// get,add,remove last 都是對隊尾的操作!/* list.addLast(4);System.out.println(list);System.out.println(list.getLast());System.out.println(list.removeLast());System.out.println(list);*///offer,peek,poll first也是對隊首的操作/* System.out.println(list.offerFirst(5));System.out.println(list);System.out.println(list.peekFirst());System.out.println(list.pollFirst());System.out.println(list);*///offer,peek,poll Last也是對隊尾的操作/* System.out.println(list.offerLast(5));System.out.println(list);System.out.println(list.peekLast());System.out.println(list.pollLast());System.out.println(list);*///as a stack LIFO/* System.out.println(list.pop());System.out.println(list);list.push(6);System.out.println(list);System.out.println(list.peek());System.out.println(list.pop());System.out.println(list); *///單向隊列!!! FIFO/* list.add(4);//入隊 ==addLastSystem.out.println(list);System.out.println(list.remove());//出隊 ==removeFirstSystem.out.println(list);*///雙向隊列l(wèi)ist.addFirst(4);list.addLast(5);//add=addLastSystem.out.println(list);list.removeFirst();System.out.println(list);list.removeLast();System.out.println(list);list.remove();System.out.println(list);//remove相當(dāng)于removeFirst}#Stack
java.lang.Object ? java.util.AbstractCollection<E>? java.util.AbstractList<E>? java.util.Vector<E>? java.util.Stack<E>public class Stack<E> extends Vector<E>public class Vector<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable可以看出Stack的 API很簡單,但是繼承了Vector(和ArrayList差不多,據(jù)說線程安全,在下不相信啊,可以不用Synchronized?),可以看出一下幾個特點:
- 具有隨機(jī)快速訪問特點
- 具有clone功能
- 序列化
- 有List和AbstractList已經(jīng)實現(xiàn)的全部方法。
自己模仿寫了個stack,原理差不多。
public class StackDemo {@Testpublic void test() {List<Integer> list = Arrays.asList(1, 2, 3, 4);MyStack<Integer> stack = new MyStack<Integer>(list);//初始大小為5;stack.push(5);stack.push(6);//該擴(kuò)容了stack.push(7);stack.push(8);//該擴(kuò)容了System.out.println(stack.peek());//8System.out.println(stack.pop());//8System.out.println(stack.peek());//7}class MyStack<E> {Object[] elems;int size;//數(shù)組大小int count;//元素個數(shù)int incrementItervel;public MyStack(int size, int incrementItervel) {this.elems = new Object[size];this.size = size;this.incrementItervel = incrementItervel;}public MyStack(int size) {this(size, 2);}public MyStack(Collection<E> collections) {this();addAll(collections);}public MyStack() {this(5);}private void addAll(Collection<E> collections) {Iterator<E> it = collections.iterator();while (it.hasNext()) {ensureCapacity();push(it.next());}}public void ensureCapacity() {while (size <= count) {Object[] objs = new Object[size + incrementItervel];System.arraycopy(elems, 0, objs, 0, elems.length);elems = objs;size += incrementItervel;System.out.println("我擴(kuò)容了"+size);}}public void push(E e) {ensureCapacity();elems[count++] = e;}public E peek() {return (E) elems[count - 1];}public E pop() {return (E) elems[--count];}} } 我擴(kuò)容了7 我擴(kuò)容了9 8 8 7轉(zhuǎn)載于:https://my.oschina.net/xd03122049/blog/863124
總結(jié)
以上是生活随笔為你收集整理的LinkedList总结+数组栈Stack的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodeJs express mongo
- 下一篇: Android Studio 使用Ecl