數組和集合(二):List集合的使用總結


一、概述

  • · 繼承collection接口,List代表一個元素有序、且可重復(包括null)的集合,集合中的每個元素都有其對應的順序索引
  • · List默認按元素的添加順序設置元素的索引
  • · 提供了一些通過索引來操作集合中指定位置元素的方法

二、List實現類

1. ArrayList

  • · 基於動態數組實現,初始容量10,添加一個元素時,如果超出當前數組的容量,就擴容1.5倍,
  • · 插入、刪除元素時,需移動元素,效率較低;查找元素效率高
  • · 非線程安全

2. LinkedList

  • · 是個雙向鏈表,可以被當作棧、隊列或雙端隊列來使用
  • · 插入、刪除元素時,效率較高;查找元素要遍歷鏈表,效率較低
  • · 非線程安全

3. Vector:線程安全的動態數組,效率低(已過時,不建議使用)

4. Stack:繼承Vector,基於動態數組實現的一個線程安全的棧(后進先出)

 

三、遍歷List的四種方法

初始化數據:

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循環遍歷

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());

}

 

四、ListIterator與Iterator的區別

  1. 使用范圍不同,Iterator可以應用於所有的集合,Set、List和Map和這些集合的子類型。而ListIterator只能用於List及其子類型。
  2. ListIterator有add方法,可以向List中添加對象,而Iterator不能。
  3. ListIterator和Iterator都有hasNext()和next()方法,可以實現順序向后遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實現逆向(順序向前)遍歷。Iterator不可以。
  4. ListIterator可以定位當前索引的位置,nextIndex()和previousIndex()可以實現。Iterator沒有此功能。
  5. 都可實現刪除操作,但是ListIterator可以實現對象的修改,set()方法可以實現。Iterator僅能遍歷,不能修改。

 五、使用List的總結

  1. Arrays.asList(...)方法返回一個只讀的List對象,不可修改、刪除,是Arrays類中的一個內部類
  2. List集合按屬性排序:使用Collections.sort()方法,自定義一個比較器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM