成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

談談ArrayList、Vector和LinkedList 的存儲性能及特性

開發 前端
面試官請你談談ArrayList、Vector和LinkedList 的存儲性能及特性。今天我給大家分享一下我對這個問題的理解。

? 又有一位工作2年的小伙伴面試的時候,被問到一個集合相關的問題。說請你談談ArrayList、Vector和LinkedList 的存儲性能及特性。

今天呢,我給大家分享一下我對這個問題的理解。

?1、存儲性能及特性

關于ArrayList、Vector和LinkedList 的存性能理及特性,我從以下3個方面來分析:

圖片

(1)首先,ArrayList 和 Vector 的底層都是采用數組的來存儲數據,而且都是根據索引來取數據,這樣設計使得獲取數據快而插入數據慢。另外,每次擴容都要移動數組中的元素,存儲數據量較大的時候會影響讀寫性能。

圖片

(2)其次,由于Vector 中的方法都使用了 synchronized 修飾,因此 ,Vector 中對數據操作都是線程安全的,但性能上比ArrayList 差。

圖片

(3)然后,LinkedList 的底層是采用雙向鏈表來存儲數據的,也就是說將內存中零散的內存單元通過附加的引用關聯起來,形成一個可以按序號索引的線性結構,這種鏈式存儲方式與數組的連續存儲方式相比,內存的利用率更高。LinkedList獲取數據需要根據索引序號,向前或者向后遍歷,但是插入數據時只需要記錄本項的前后項即可,所以,LinkedList插入數據的速度更快。

圖片

(4)最后,再補充一點,Vector是Java 早期的版本中提供的容器, 屬于遺留容器,官方已經不再推薦使用。但是由于 ArrayList 和 LinkedListed 都是非線程安全的,在多線程環境下,可以使用工具類Collections 的 synchronizedList() 方法,將容器轉換成線程安全的容器再使用。這其實也是裝飾器模式的一種應用。

2、關于遺留容器

關于Java中的遺留容器,我最后再補充一下。除Vector之外,還有Hashtable、Dictionary、BitSet、Stack、Properties都是遺留容器,這些容器中,Properties 類存在比較嚴重的設計缺陷。來看這段源碼:

/* Since : JDK1.0 See Also : native2ascii tool for Solaris, native2ascii tool for Windows Author : Arthur van Hoff, Michael McCloskey, Xueming Shen */ public class Properties extends Hashtable<Object,Object> { }

Properties是一個鍵和值都是字符串的特殊的鍵值對映射,在設計上應該是關聯一個Hashtable,并將它的兩個泛型參數設置為 String 類型,但是 Java API 中的Properties是直接繼承了 Hashtable,這很明顯是對繼承的濫用。主要體現在以下兩個方面:

圖片

(1)首先,根據合成復用原則,這里Properties 和Hashtable的代碼復用關系應該是 Has-A 關系,而不是 Is-A 關系。

(2)另一方面,這兩個容器都屬于工具類,繼承工具類本身就是一個錯誤的做法,使用工具類最好的方式是 Has-A 關系(關聯)或Use-A 關系(依賴)。

既然都講到這里了,最后再擴展一下Stack 類在設計上也存在Properties同樣的缺陷。來看這樣一段源碼:

圖片

/* Since : JDK1.0 Author : Jonathan Payne */ public class Stack<E> extends Vector<E> { }

在JDK的util包中,我們發現Stack類也是繼承了 Vector,這個設計也是不太合理的。

好了,以上就是我對ArrayList、Vector和LinkedList的理解。

責任編輯:姜華 來源: Tom彈架構
相關推薦

2019-11-06 16:21:25

ArrayListLinkedListVector

2011-05-26 14:49:53

ArrayListLinkedList

2023-05-16 07:39:15

ArrayList磁盤IO

2021-07-11 09:34:45

ArrayListLinkedList

2021-10-12 16:46:59

ArrayList接口LinkedList

2024-10-05 00:00:15

ArrayList性能Java

2012-04-16 15:08:33

2021-07-08 10:00:59

LinkedLis集合定義

2012-02-22 14:14:43

Java

2020-07-30 07:30:17

存儲技術數據

2021-10-09 20:13:03

ArrayListLinkedList java

2009-10-10 15:36:45

布線系統性能

2018-09-29 15:34:34

JavaList接口

2017-08-03 17:30:51

IBM存儲IBM存儲

2012-05-03 15:01:24

數值壓縮

2015-12-18 10:53:15

Linux網絡特性性能

2010-03-16 15:36:32

網絡交換機

2021-01-12 08:20:51

AndroidActivity系統

2023-06-01 08:19:19

ArrayListVector多線程

2022-08-14 07:14:50

Kafka零拷貝
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久久久久 | 无码日韩精品一区二区免费 | 国产成人久久av免费高清密臂 | 婷婷丁香综合网 | 国内精品久久精品 | 欧美午夜一区二区三区免费大片 | 亚洲欧美日韩国产 | 国产精品久久性 | 国产精品一区二区三区四区 | 亚洲vs天堂 | 日韩欧美精品一区 | 国产成人精品一区二区三区四区 | 噜噜噜噜狠狠狠7777视频 | 日本天堂一区二区 | 美国一级毛片a | 国产成人久久 | 中文字幕11页 | www.天天操 | 毛片免费观看视频 | 精品欧美黑人一区二区三区 | 日韩一区二区三区视频 | 在线观看深夜视频 | 国产一级片在线播放 | 精品欧美视频 | 国产日韩欧美在线观看 | 成人av影院 | 久久久久久久久久久丰满 | 色婷婷一区二区三区四区 | 成人一区二区三区 | 国产精品视频久久久久 | 国产精品a久久久久 | 毛片视频网站 | 7799精品视频天天看 | 四虎成人精品永久免费av九九 | 国产一区二区在线视频 | 亚洲一区综合 | 凹凸日日摸日日碰夜夜 | 九九热免费看 | 亚洲美女在线一区 | 欧美激情国产日韩精品一区18 | 伊人在线|