1、概述
- · 繼承collection接口,List表明一個元素有序、且可重複(包括null)的集合,集合中的每一個元素都有其對應的順序索引
- · List默認按元素的添加順序設置元素的索引
- · 提供了一些經過索引來操做集合中指定位置元素的方法
2、List實現類
1. ArrayList數組
- · 基於動態數組實現,初始容量10,添加一個元素時,若是超出當前數組的容量,就擴容1.5倍,
- · 插入、刪除元素時,需移動元素,效率較低;查找元素效率高
- · 非線程安全
2. LinkedList安全
- · 是個雙向鏈表,能夠被看成棧、隊列或雙端隊列來使用
- · 插入、刪除元素時,效率較高;查找元素要遍歷鏈表,效率較低
- · 非線程安全
3. Vector:線程安全的動態數組,效率低(已過期,不建議使用)spa
4. Stack:繼承Vector,基於動態數組實現的一個線程安全的棧(後進先出)線程
3、遍歷List的四種方法
初始化數據:code
List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc");
方法一:foreach循環遍歷對象
for(String attribute : list) { System.out.println(attribute); }
方法二:for循環遍歷blog
for(int i = 0 ; i < list.size() ; i++) { System.out.println(list.get(i)); }
方法三:Iterator(集合類的通用遍歷方式)排序
Iterator it = list.iterator(); while(it.hasNext()) { System.ou.println(it.next); }
方法四:ListIterator(使用同Iterator)繼承
- · ListIterator接口繼承了Iterator接口,提供了專門操做List的方法
ListIterator<String> listIterator = list.listIterator(); while (listIterator.hasNext()){ System.out.println(listIterator.next()); }
4、ListIterator與Iterator的區別
- 使用範圍不一樣,Iterator能夠應用於全部的集合,Set、List和Map和這些集合的子類型。而ListIterator只能用於List及其子類型。
- ListIterator有add方法,能夠向List中添加對象,而Iterator不能。
- ListIterator和Iterator都有hasNext()和next()方法,能夠實現順序向後遍歷,可是ListIterator有hasPrevious()和previous()方法,能夠實現逆向(順序向前)遍歷。Iterator不能夠。
- ListIterator能夠定位當前索引的位置,nextIndex()和previousIndex()能夠實現。Iterator沒有此功能。
- 均可實現刪除操做,可是ListIterator能夠實現對象的修改,set()方法能夠實現。Iterator僅能遍歷,不能修改。
5、使用List的總結
- Arrays.asList(...)方法返回一個只讀的List對象,不可修改、刪除,是Arrays類中的一個內部類
- List集合按屬性排序:使用Collections.sort()方法,自定義一個比較器