黑馬程序員----------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:自己數組實現太麻煩,而且開發中不可能用數組自己實現
|--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:自己數組實現太麻煩,而且開發中不可能用數組自己實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.