日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ArrayList与LinkedList、Vector的区别 HashMap与HashTable、HashSet的区别

發(fā)布時間:2024/9/30 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ArrayList与LinkedList、Vector的区别 HashMap与HashTable、HashSet的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、ArrayList?和?LinkedList區(qū)別:

(1)兩者都是線程不安全,都實現(xiàn)了Collection接口。

(2)數(shù)據(jù)結構:ArrayList是基于動態(tài)數(shù)組的數(shù)據(jù)結構,LinkedList是基于雙向鏈表的數(shù)據(jù)結構。

(3)性能:ArrayList支持隨機訪問,查詢快,增刪慢,查詢的時間復雜度為O(1),插入和刪除的時間復雜度為O(n),因為對插入和刪除位置后面的元素進行移動位置,以保證內(nèi)存的連續(xù)性

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的空間浪費主要體現(xiàn)在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現(xiàn)在它的每一個元素都需要消耗相當?shù)目臻g。

?

二、ArrayList和Vector的區(qū)別:

(1)數(shù)據(jù)結構:ArrayList和Vector底層的數(shù)據(jù)結構都是數(shù)組。

(2)線程安全:Vector線程安全的,底層使用synchronize進行加鎖,而ArrayList是線程不安全的。

(3)性能:由于Vector使用synchronize鎖來確保線程的安全性,所以性能會稍遜于ArrayList。

(4)初始容量和擴容:ArrayList和Vector的默認初始容量都是10,但是擴容時,ArrayList容量會增長為原來的1.5倍,而Vector的容量會增長為原來的2倍。

(5)Vector實現(xiàn)的Enumeration接口,所以可以使用Enumeration進行遍歷元素。

?

三、HashMap和Hashtable的區(qū)別:

(1)線程安全性:這是兩者最主要的區(qū)別,Hashtable是線程安全,而HashMap則非線程安全。Hashtable的實現(xiàn)方法里面都添加了synchronized關鍵字來確保線程同步,因此相對而言HashMap性能會高一些。

(2)計算hash值的方式:HashMap中元素的hash值是重新計算過的,以便獲得更好的散列值,Hashtable直接使用Object的hashcode

(3)數(shù)據(jù)結構:在JDK1.8之前,HashMap和Hashtable的數(shù)據(jù)結構都可以看成“數(shù)組+鏈表”;在JDK1.8之后,HashMap的數(shù)組結構變成了“數(shù)組+鏈表+紅黑樹”

(4)兩者均實現(xiàn)了Map接口,但是HashMap繼承了AbstractMap,HashTable繼承Dictionary抽象類

(5)HashMap允許null值和null鍵(只允許一個),HashMap以null作為key時,總是存儲在table數(shù)組的第一個節(jié)點上。而Hashtable則不允許null作為key。

(6)HashMap的初始容量為16,Hashtable初始容量為11,兩者的填充因子默認都是0.75。擴容時,HashMap的容量變成原來的2倍,Hashtable的容量變?yōu)?倍+1

(7)Hashtable實現(xiàn)了Enumeration接口,所以可以使用Enumeration進行遍歷元素

(8)判斷是否含有某個鍵?:HashMap去掉了Hashtable中的contains()方法

在HashMap 中,null 可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null 值時,既可以表示HashMap 中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在HashMap 中不能用get()方法來判斷HashMap 中是否存在某個鍵,而應該用containsKey()方法來判斷。

Hashtable 的鍵值都不能為null,所以可以用get()方法來判斷是否含有某個鍵。

?

四、HashMap和HashSet的區(qū)別:

總結

以上是生活随笔為你收集整理的ArrayList与LinkedList、Vector的区别 HashMap与HashTable、HashSet的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。