JAVA高階基礎(6)---Vector和LinkedList
阿新 • • 發佈:2018-11-26
Vector
- 是 List 介面一個長度可變的陣列的實現。
- 可以儲存null
- 是同步的(是執行緒安全的)
注:更多詳細方法請自行在 API 上查詢
ArrayList和Vector的區別:是否是同步的
package org.lanqiao.list.demo; import java.util.Iterator; import java.util.List; import java.util.Vector; public class VectorDemo { public static void main(String[] args) { List list = new Vector(); list.add("aa"); list.add("bb"); list.add("cc"); list.add(1); Vector v = (Vector)list; v.addElement("java"); v.addElement(null); v.addElement(null); v.addElement(null); v.addElement(null); for(int i = 0 ; i < v.size();i++) { System.out.println(v.elementAt(i)); } Iterator iter = v.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); } } }
LinkedList
- 是List介面的雙向連結串列實現
- 允許儲存所有的元素,包括null
- 不是同步的
注:更多詳細方法請自行在 API 上查詢
LinkedList包含了棧、佇列、連結串列的所有的操作。
package org.lanqiao.list.demo; import java.util.LinkedList; import java.util.List; public class LinkedListDemo { public static void main(String[] args) { List list = new LinkedList();//介面的多型 /* * 這裡使用的是list介面的引用指向了LinkedList的物件 * 這稱為介面的多型 * 那麼因此在這裡,我們適應list只能使用已經在List介面中宣告的方法 * 而不能使用LinkedList特有的方法 * 如果要使用LinkedList特有的方法: * 直接宣告LinkedList的物件 * 將list進行向下轉型 */ LinkedList linkedList = new LinkedList(); LinkedList list2 = (LinkedList)list; linkedList.push(11); list2.push("aaa"); } }
List在實際開發中的使用
1、如何來選擇list介面的不同實現?:
ArrayList和Vector的區別:是否是同步的
LinkedList 和 ArrayList、Vector的選擇?
- 使用連結串列實現的 LinkedList
- 使用陣列實現的 ArrayList、Vector
如果針對資料的操作中,查詢元素用的比較多,用陣列的實現。
如果針對資料的操作中,新增、插入和刪除操作較為頻繁,用連結串列的實現。
2、在List的使用中,是使用介面的多型還是使用其具體的物件?
在實際開發中,使用List介面的多型更多。
3、在實際開發中,針對三個實現,如果不開率效能問題。該使用哪一種實現?
ArrayList
List 介面的三個典型實現:ArrayList(); Vector(); LinkedList();
①、List list1 = new ArrayList();
底層資料結構是陣列,查詢快,增刪慢;執行緒不安全,效率高
②、List list2 = new Vector();
底層資料結構是陣列,查詢快,增刪慢;執行緒安全,效率低,幾乎已經淘汰了這個集合
③、List list3 = new LinkedList();
底層資料結構是連結串列,查詢慢,增刪快;執行緒不安全,效率高