21.Vector ArrayList LinkedList

ArrayList(可變長度數組)


特點:查詢速度很快,增刪稍慢(角標變化),線程不同步


Vector與Arraylist同,但線程同步,效率低,被ArrayList替代


--------------------------------

瞭解Vector中特殊的東西:枚舉---------Vector特有的取出方式

Vector v=new Vector();

v.add("java01");

v.add("java02");

v.add("java03");

Enumeration en=v.elements();

while(en.hasMoreElements()){

System.out.println(en.nextElement());

}


枚舉和迭代是一樣的,因爲枚舉的名稱以及方法的名稱都過長,所以被迭代器取代。


------------------------------

ArrayList  默認夠構造一個初始容量爲10的空列表,當超過10後,再new 一個ArrayList並在原容量基礎上擴容50%(如原列表爲10,則new新的列表爲15),並

把前ArrayList的內容copy到new的裏面



去除ArrayList中重複元素:

class Demo{

Demo(ArrayList al){

ArrayList newAl=new ArrayList();

Iterator it=al.iterator();

while(it.hasNext()){

Object obj=it.next();

if(!newAl.contains(obj))

newAl.add(obj);

}

return newAl;

}

-------------------------

迭代器問題

al.add(Object obj)

若add(new Person());

由多態可知Object obj=new Person();

但obj內沒有Person方法,則無法使用Person內方法,此時可強制轉型

即在迭代器中:Person p=(Person)it.next();


------------------------

LinkedList:


特點:增刪速度快,查詢速度慢

因爲它是以鏈表的模式增刪查


LinkedList link=new LinkedList();


---------------------

link.addFirst("java01");//將指定元素添加到列表頭

link.addFirst("java02");

link.addFirst("java03");


System.out.println(link);//["java03","java02","java01"];


------------------

link.addLast("java01");//將指定元素添加到列表結尾

link.addLast("java02");

link.addLast("java03");


System.out.println(link);//["java01","java02","java03"];


System.out.println(link.getFirst());//java01
System.out.println(link.getLast());//java03           //只獲取元素

System.out.println(link.size());//3

System.out.println(link.removeFirst());//java01     removeFirst()  removeLast獲取元素並刪除

System.out.println(link.size());//3

 不用迭代器取出所有元素的方法:
while(link.isEmpty()){
System.out.println(llink.removeFirst());
}
//Output:
java01
java02
java03

如果列表爲空,拋出NoSuchElementException
---------------------------------------------------------------------------------


jdk1.6後
pollFirst()
pollLast()
分別替代removeFirst()和removeLast(),如果列表爲空,則返回null



offerFirst()-----------代-----------addFirst()
offerLast()-------------------------addLast()

peekFirst()----------替-----------getFirst()
peekLast()------------------------getLast()

---------------------------------------------------------------------------------

模擬隊列/堆棧的數據結構

堆棧:先進後出

隊列:先進先出


隊列:

class Duilie{

private LinkedList link;

Duilie(){

link=new LinkedList();

}

public void myAdd(Object obj){

link.offerFirst(obj);

}

public Object myGet(){

return link.pollLast();

}

public boolean isNull()[

return link.isEmpty();

}

}


這樣就採用了LinkedList封裝爲了一個具有隊列功能的類了,

其本身是鏈表操作,我們要做與項目相關的容器,需要起一些名字

採用以方便,我們會把原有的集合封裝進我們的描述中並對外提供自己更能識別名稱的名字


-----------------------------------------------------


List集合可通過重寫public boolean equals()來判斷元素是否相同,也可直接依據本封裝好的方法來判斷兩個集合是否相同

boolean equals(Object o)
比較指定的對象與列表是否相等。當且僅當指定的對象也是一個列表、兩個列表有相同的大小,並且兩個列表中的所有相應的元素對相等 時才返回 true( 如果 (e1==null ? e2==null :e1.equals(e2)),則兩個元素 e1e2相等 的)。換句話說,如果所定義的兩個列表以相同的順序包含相同的元素,那麼它們是相等的。該定義確保了 equals 方法在 List 接口的不同實現間正常工作。 


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