鏈表和數組
數組是有下標索引和data兩部分組成
鏈表是有data和指向下一個數據的指針地址兩部分組成
重點介紹:
Vector、ArrayList都是以數組的形式存儲在內存中,所以查詢效率高,新增和刪除效率不高,但是Vector被Synchronized修飾,所以線程是安全的,ArraryList線程不安全。
LinkedList則以鏈表的形式進行存儲,所以查詢效率底,新增和刪除效率高,並且線程不安全。
鏈表 | 數組 | |
內存占用 | 不需要連續的內存空間 | 需要連續的內存空間 |
大小可變 | 鏈表的大小可動態變化 | 數組大小固定,不能動態擴展 |
增刪 | 較快,只需要修改前一個元素的指針即可 | 較慢,需要移動修改元素只有的所有元素 |
查詢 | 較慢,只能遍歷查找 | 較快,可以通過下標直接訪問 |
在訪問方式上 | 必須是順序訪問,不能隨機訪問 | 可以隨機訪問其中的元素 |
空間的使用上 | 可以隨意擴大 | 不能 |
單向鏈表和雙向鏈表
單向鏈表 | 雙向鏈表 | |
針 | 每個元素只有一個指針只會下一個元素的地址 | 每個元素有兩個指針只會上一個和下一個元素的地址 |
查詢 | 較慢 | 較快,可以通過二分查找來提速 |
增刪 | 較快 | 更快 |
存儲效率 | 略高,除了存儲元素,只會存儲一個指針 | 較低,除了存儲元素,需要存儲兩個指針 |
雙向鏈表的增、刪、查均優於單向鏈表,但是目前市面上用的較多的仍為單向鏈表,主要是雙向鏈表的多一個指針,在存儲效率上低於單向鏈表。一個指針在32位系統需要4個字節來存儲,在64位系統需要8個字節來存儲 |