ArrayList与LinkedList、Vector的区别 HashMap与HashTable、HashSet的区别
一、ArrayList?和?LinkedList區別:
(1)兩者都是線程不安全,都實現了Collection接口。
(2)數據結構:ArrayList是基于動態數組的數據結構,LinkedList是基于雙向鏈表的數據結構。
(3)性能:ArrayList支持隨機訪問,查詢快,增刪慢,查詢的時間復雜度為O(1),插入和刪除的時間復雜度為O(n),因為對插入和刪除位置后面的元素進行移動位置,以保證內存的連續性
LinkedList不支持隨機訪問,查詢慢,增刪快,查詢的時間復雜度為O(n),插入和刪除的時間復雜度為O(1)
ArrayList:
- get()?直接讀取第幾個下標,復雜度?O(1);
- add(E)?添加元素,直接在后面添加,復雜度O(1);
- add(index, E)?添加元素,在第幾個元素后面插入,后面的元素需要向后移動,復雜度O(n);
- remove()刪除元素,后面的元素需要逐個移動,復雜度O(n)。
LinkedList:
- get()?獲取第幾個元素,依次遍歷,復雜度O(n);
- add(E)?添加到末尾,復雜度O(1);
- add(index, E)?添加第幾個元素后,需要先查找到第幾個元素,直接指針指向操作,復雜度O(n);
- remove()刪除元素,直接指針指向操作,復雜度O(1)。
(4)空間的消耗:ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間。
?
二、ArrayList和Vector的區別:
(1)數據結構:ArrayList和Vector底層的數據結構都是數組。
(2)線程安全:Vector線程安全的,底層使用synchronize進行加鎖,而ArrayList是線程不安全的。
(3)性能:由于Vector使用synchronize鎖來確保線程的安全性,所以性能會稍遜于ArrayList。
(4)初始容量和擴容:ArrayList和Vector的默認初始容量都是10,但是擴容時,ArrayList容量會增長為原來的1.5倍,而Vector的容量會增長為原來的2倍。
(5)Vector實現的Enumeration接口,所以可以使用Enumeration進行遍歷元素。
?
三、HashMap和Hashtable的區別:
(1)線程安全性:這是兩者最主要的區別,Hashtable是線程安全,而HashMap則非線程安全。Hashtable的實現方法里面都添加了synchronized關鍵字來確保線程同步,因此相對而言HashMap性能會高一些。
(2)計算hash值的方式:HashMap中元素的hash值是重新計算過的,以便獲得更好的散列值,Hashtable直接使用Object的hashcode
(3)數據結構:在JDK1.8之前,HashMap和Hashtable的數據結構都可以看成“數組+鏈表”;在JDK1.8之后,HashMap的數組結構變成了“數組+鏈表+紅黑樹”
(4)兩者均實現了Map接口,但是HashMap繼承了AbstractMap,HashTable繼承Dictionary抽象類
(5)HashMap允許null值和null鍵(只允許一個),HashMap以null作為key時,總是存儲在table數組的第一個節點上。而Hashtable則不允許null作為key。
(6)HashMap的初始容量為16,Hashtable初始容量為11,兩者的填充因子默認都是0.75。擴容時,HashMap的容量變成原來的2倍,Hashtable的容量變為2倍+1
(7)Hashtable實現了Enumeration接口,所以可以使用Enumeration進行遍歷元素
(8)判斷是否含有某個鍵?:HashMap去掉了Hashtable中的contains()方法
在HashMap 中,null 可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null 值時,既可以表示HashMap 中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在HashMap 中不能用get()方法來判斷HashMap 中是否存在某個鍵,而應該用containsKey()方法來判斷。
Hashtable 的鍵值都不能為null,所以可以用get()方法來判斷是否含有某個鍵。
?
四、HashMap和HashSet的區別:
總結
以上是生活随笔為你收集整理的ArrayList与LinkedList、Vector的区别 HashMap与HashTable、HashSet的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据库:存储引擎
- 下一篇: MySQL数据库:范式