黑馬程序員----------List三個子類的特點以及應用場景

                                ----------------------android培訓java培訓、期待與您交流! ----------------------
|--List 常用方法
      add(int index,Object obj),添加指定的元素到指定索引處
      get(int index),獲取指定索引處的元素
      indexOf(Object obj),返回指定元素在集合中第一次出現的索引值,如果不存在,返回-1
      set(int index,Object obj)設置指定索引處的值(也就是替換),返回的是被替換掉的元素
      listIterator(),List特有的迭代器
      subList(int start,int end),截取指定區間的元素
      remove(int index)移除指定索引處的元素,返回的是被移除的元素

|--ArrayList 特殊方法幾乎沒有
            
|--LinkedList
      addFirst,添加指定元素到當前集合第一個位置
      addLast添加指定元素到當前集合的最後位置
      removeFirst,移除第一個元素
      removeLast,移除最後一個元素
      getFirst,獲取集合第一個元素
      getLast,獲取元素最後一個元素
                  下面方法JDK6以後被替代了(不用看)
                  offerFirst,offerLast,pollFirst,pollLast,peekFirst,peekLast
|--Vector
      addElement(Object obj),添加指定元素到當前集合第一個位置
      elements() 暫時不用掌握
      首先說數據結構:
      ArrayList和Vector底層都是以數組的形式實現的
      LinkedList底層是以鏈表的形式實現的
     幾種數據結構:
     A:棧 先進後出 Stack(就像是一個只能單人通過的死衚衕,第一個進去的只能最後一個出來)


     B:隊列 先進先出 Queue(就像是排隊買火車票,排在前邊的人肯定比排在後邊的人先買到票)

     C:數組 查詢效率高.增刪慢(就像是基本的數組一樣,每個元素都有自己的下標,查詢只需要按照下標尋找即可)
這個就不再弄圖啦
     D:鏈表 查詢效率低.增刪快(就像是去某個地方倒公交車一樣,你到達不了下一站就沒辦法到達下一站能去到的地方)

      特點
      A:ArrayList
            底層數據結構是數組,查詢快,增刪慢。
            線程不安全,效率高。
            輕量級(版本高)
        B:Vector
            底層數據結構是數組,查詢快,增刪慢。
            線程安全,效率低。
            
重量級(版本低)      
       CinkedList
            底層數據結構是鏈表,查詢慢,增刪快。
            線程不安全,效率高。

      那麼,究竟用誰呢?
      看需求:
      是否要安全:
            是:Vector
            否:ArrayList或者LinkedList   
                查詢多:ArrayList
                就像上課用的課表,可以每個人都標上各自標號,因爲平時一個班的人不會經常添加或走
                增刪多:LinkedList
        如果你什麼都不懂,那麼就用ArrayList。
      還有幾個經典的面試題:
      選擇題:如果在實際開發中讓你自己做一個棧,你會通過哪種方式實現?
      A.java.util.Stack(javaAPI中提供的棧)
      B.數組
      CinkedList
      答案是: C
      我們可以用java提供給我們的現成的棧去當我們自己的類的屬性,這樣就可以屏蔽掉那些自己不想用的方法,而只用對自己有用的方法,在外界是看不到我們具體方法的實現的.代碼如下:
import java.util.Stack;
public  MyStack{
    //成員變量
    private Stack st;
   //構造方法
    public MyStack(){
        Stack st = new Stack();
}//將java提供給我們的Stack作爲我的屬性,這樣就可以用對我們有用的方法   
    public Object pop(){//
移除堆棧頂部的對象,並作爲此函數的值返回該對象。
        return st.pop;
    }
    public Object push(
Object o){//把項壓入堆棧頂部。
        st.push(Object o);
    }
}
      原因是: A
它繼承了Vector,就是繼承了它的數組實現形式,這並不是重要的,關鍵是他也繼承了Vector的所有不是私有的方法,這些方法中有好多是不適用與棧的,比如可以隨意的插入元素,那麼就違反了棧的原則
                  B:自己數組實現太麻煩,而且開發中不可能用數組自己實現
       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章