最全面複習---Java集合框架---List

 

再次回顧一下之前的Collection的繼承體系

  • Collection
    • List
      • ArrayList
      • Vector
      • LinkedList
    • set
      • HashSet
      • TheeSet

現在我們來看List相關的內容

1、List是Collection的子接口

特點:有序(存儲順序和取出順序一致),可重複

2、List的特有功能

      a、添加功能
           void add(int index, Object element):在指定位置添加元素
       b、獲取功能
           Object get(int index):獲取指定位置的元素
       c、列表迭代器
           ListIterator ListIterator():List集合特有的迭代器
       d、Object remove(int index):根據索引刪除元素,返回被刪除的元素
       e、Object set(int index,Object element):根據索引修改元素,返回被修飾的元素

3、List集合的特有遍歷功能

1、size和get結合

2、for循環遍歷

一般我們用增強for循環較多,這個就不在這裏贅述了,提到一下就好

4、List有列表迭代器這樣一個特色的功能,大家可以瞭解一下,可以實現逆向遍歷,但是必須要先正向遍歷

所以一般沒什麼意義,一般不用

5、併發修改異常

a、出現的現象:

    迭代器遍歷集合,集合修改集合元素

b、原因

    迭代器是依賴於集合的,而集合的改變迭代器並不知道

c、解決方案:

    1、迭代器遍歷,迭代器更改(ListIterator)

        元素添加在剛剛迭代的位置

    2、集合遍歷,集合修改size和get

        元素添加在集合的末尾


List的子類:

1、List的子類
1.List子類特點:
    ArrayList
        底層數據結構是數組,查詢快,增刪慢
        線程不安全,效率高
    Vector
        底層數據結構是數組,查詢快,增刪慢
        線程安全,效率低
    LinkedList
        底層數據結構是鏈表,查詢慢,增刪快
        線程不安全,效率高

2.ArrayList
    沒有特有功能要學習
    案例:
            1、ArrayList存儲字符串並遍歷
            2、ArrayList存儲自定義字符串並遍歷
3.Vector
    特有功能:
添加
public void addElement(E obj)-----add()
獲取
public E elementAt(int index)------get()
public Enumeration<E> elements()---iterator()
4.LinkedList
特有功能:
添加
addFirst()
addLast()
刪除
removeFirst()
removeLast()
獲取
getFirst()
getLast()
案例:
    a、LinkedList存儲字符串並遍歷
    b、LinkedList存儲自定義對象並遍歷
5.案例:
    A、去除集合中的多個字符串的重複元素
如果字符串的內容相同,即爲重複元素
    B、去除集合中的多個自定義對象的重複元素
如果自定義對象的成員變量值都相同,即爲重複元素
    C、用LinkedList模擬一個棧數據結構的集合類,並測試    

在JDK5之後出現了增強for循環

 增強for:是for循環的一種
 格式:
      for(元素數據類型 變量: 數組或者Collection集合){
       使用變量即可,該變量就是元素
       }
 好處:簡化了數組和集合的遍歷


 弊端:增強for的目標不能爲null
 如何解決呢?
   對增強for的目標先判斷不爲空,再使用增強for


 增強for其實是用來替代迭代器的

 

 


下面作爲一個補充,List之前考到過的面試題

List的面試題
List的子類特點
    ArrayList:
        底層數據結構是數組,查詢快,增刪慢
        線程不安全,效率高
    Vector:
        底層數據結構是數組,查詢快,增刪慢
        線程安全,效率低
    LinkedList:
        List接口的鏈表實現(雙重鏈表)
        底層數據結構是鏈表,查詢慢,增刪快
        線程不安全,效率高

List有三個子類,使用哪一個呢?
看情況,看需求。
    要安全:Vector 即使要安全也不用,後面有替代的
    不要安全:ArrayList或者LinkedList
    查詢多:ArrayList
    增刪多:LinkedList

所有案例代碼:https://github.com/ZhengXinYu666/Day_16

 

 

 

 

 

 

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