我們常用的list分為以下三種:arraylist、linkedlist、vector。今天,我們就來從原始碼角度分析以下這三種list:
一、arraylist、linkedlist、vector的異同與使用場景
一般來說,arraylist與vector都是使用陣列來儲存,linkedlist是使用雙向鍊錶進行儲存,所以,arraylist和vector查詢元素比較快,因為陣列可以直接根據位置進行定位,而雙向鍊錶還需要根據煉表頭或者鍊錶尾進行遍歷查詢。而在插入元素時,一般來說linkedlist比較快,因為雙向鍊錶只需要找到插入位置的前乙個元素,然後進行插入即可(當然需要更改後乙個元素的前驅),而因為陣列是確定大小的,在尾部新增元素時,arraylist與vector都需要確認一下陣列是否充足,如果不充足,還需要將陣列進行擴大,再將原先的元素重新copy進去,而在中間插入元素時,arraylist與vector,arraylist與vector也需要確認一下陣列是否充足,然後將插入位置的元素整體後移,所以一般來說,在插入元素時,linkedlist更快一些。
二、arraylist、vector原始碼分析與比較
比如add方法:
arraylist:
public
boolean
add(e e)
vector:
public
synchronized
boolean
add(e e)
可以看到,arraylist與vector差別不大,不過vector的add方法是執行緒安全的。
另外,在增加陣列大小的grow()方法中
arraylist:
private
void
grow(int mincapacity)
vector:
private
void
grow(int mincapacity)
可以看到 arraylist 一般是增加自己的一半,而vector是增加自己的一倍。 List類系列(二) List類的list 方法
1.用於將元組轉換為列表 元組與列表是非常類似的,區別在於元組的元素值不能修改,元組是放在括號中,列表是放於方括號中。以下例項展示了 list 函式的使用方法 usr bin python coding utf 8 atuple 123,xyz zara abc alist list atuple ...
Java中list類的使用
1 arraylist為list的重要實現類,list中的元素是有序排列並且可重複的。list的建立 list list new arraylist 2 list的方法 list中元素個數是否為空?list.isempty list是否已經被建立 null list 獲取list的長度 list.s...
python使用List和類的方式構建樹和二叉樹
使用list構建樹 g g h h i i k k e e g,h,i,k d d f f a a d,e b b c c f root root a,b,c print root class btree 二叉樹節點 def init self,value 初始化函式 self.left none ...