[Java][老師範例][集合]List(未完)

List 
List 是一種Collection,作用是收集物件,並用索引的方式保留收集的物件順訊,其實作類別之一是java.util.ArrayList,API文件裡面,可以看到List介面定義了add()、remove()、set()等操作方法,List中的ArrayList與LinkedList的特性很像,如何區分兩者?​​

List 
List 是一種Collection,作用是收集物件,並用索引的方式保留收集的物件順訊,其實作類別之一是java.util.ArrayList,API文件裡面,可以看到List介面定義了add()、remove()、set()等操作方法,List中的ArrayList與LinkedList的特性很像,如何區分兩者?​​

  • ArrayList

    第一個要考慮的是效率的問題,java.util.ArrayList實作內部的時候是使用Object陣列來保存收集的物件,所以要用ArrayList的話就等於要使用陣列的特性,陣列在記憶體空間中是連續的線性空間,根據索引隨機存取時速度快,如果有需要排序,就可以使用ArrayList,可以得到較好的速度表現,另外因為陣列在記憶體中會是連續的線性空間,如果需要調整索引的順序的話效率就不會太好。

    例如再已收集100個物件的ArrayList 中,使用可以指定索引的add()方法,將物件新增到位置0的位置,原先的索引0的物件就必須調整至索引1,索引1的物件調整到索引2,以此類推,因此並沒有效率。

    第二個要考慮的問題是陣列的長度,在ArrayList內部陣列長度不夠的時候,會建立新的陣列,並將舊的陣列位置指定給新的陣列,這也是很費記憶體和時間的操作,ArrayList有個可以指定容量的建構式,如果大致上知道收集的物件範圍,先建立足夠長度的內部陣列,就可以節省成本。
  • LinkedList

    LinkedList在實作List介面的時候,採用鏈結(Link)結構,