Array:
數組在創建的時候,數組的大小也被要求確定(fixed in size),并且無法在原有數組上添加和刪除項,只能覆蓋原有數組。
ArrayList
數組列表的存儲對象是Object類型,所以同一個數組中數據類型并不固定。即你可以實例化一個數組列表并且添加不同數據類型的值。(數組列表在泛型出現之前比較常用,但是它是類型不安全的)
List
列表的存儲對象是Object類型,但是同一列表,存儲的數據類型一致。列表可以通過index獲取數據值。列表是存入數組里,當原有數組空間不夠大會自動創建一個更大的空間,并把原有的數據拷貝到新的數組內。
在列表開頭或中間位置添加/刪除項 , 之后的所有項需要移動重新拷貝到新的位置。時間復雜度 O(n)
在列表結尾添加/刪除項, 如果不考慮空間不足重新開辟新數組空間的情況,時間復雜度是 O(1)
查詢數據值,需要從頭一個一個對比查詢(liner search), 時間復雜度 O(n)
根據索引獲取數據值, O(1)
Dictionary
Dictionary的存儲方式需要提供key, value對, 而且key是唯一不重復的。字典也是存入數組里面,但是和List不同的是,Dictionary是采用Hash算法進行存儲(根據已知的Key,通過Hash算法以及數組大小得到相應的存儲位置,所以Key要求唯一且不能為空)。對于Dictionary, 插入,刪除,查找的時間復雜度均為O(1)。
HashSet
HashSet是存入一組唯一的數據項(不會出現重復項)(當試圖存入原來存在的數據項的時候,原有數據項位置會被重寫,而且數據項的數量不會增加,HashSet.Count 的值不變),和Dictionary相同的是,它們都采用Hash算法進行存儲,不同的是不需要存入key, value對。時間復雜度與Dictionary類似。
Stack
Stack先進后出,當需要返回的時候可以采用棧,也是存入數組里面。Pop O(1), Push O(1)-O(n), Contains O(n)
Queue
Queue先進先出,當我們需要根據存入的順序去返回值的時候可以采用隊列。
總結:
List:當你需要通過索引獲取值的時候比較快,但是查詢的時候比較慢,因為是線性查找。
Dictionary:它提供了一種用Key快速查詢的方式。
HashSet: 當要求判斷值是否存在可以采用HashSet,當然查詢也很快。
Stack: 當需要提供用戶返回的行為功能時可以使用。
Queue: 當提供用戶根據存入順序進行返回的行為時可以使用。
參考網址: