大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java五個最常用的集合類之間的區別和聯系

Java五個最常用的集合類之間的區別和聯系

更新時間:2019-12-25 15:28:28 來源:動力節點 瀏覽3002次

常用的集合類有一下幾種:

  List結構的集合類:ArrayList類,LinkedList類,Vector類,Stack類

  Map結構的集合類:HashMap類,Hashtable類

  Set結構的集合類:HashSet類,TreeSet類

  Queue結構的集合:Queue接口

  HashMap和Hashtable的區別:

  HashMap和Hashtable都是java的集合類,都可以用來存放java對象,這是他們的相同點

  以下是他們的區別:

  1.歷史原因:

  Hashtable是基于陳舊的Dictionary類的,HashMap是java 1.2引進的Map接口的一個現實。

  2.同步性:

  Hashtable是同步的,這個類中的一些方法保證了Hashtable中的對象是線程安全的,而HashMap則是異步的,因此HashMap中的對象并不是線程安全的,因為同步的要求會影響執行的效率,所以如果你不需要線程安全的結合那么使用HashMap是一個很好的選擇,這樣可以避免由于同步帶來的不必要的性能開銷,從而提高效率,我們一般所編寫的程序都是異步的,但如果是服務器端的代碼除外。

  3.值:

  HashMap可以讓你將空值作為一個表的條目的key或value

  Hashtable是不能放入空值(null)的

  ArrayList和Vector的區別:

  ArrayList與Vector都是java的集合類,都是用來存放java對象,這是他們的相同點,

  區別:

  1.同步性:

  Vector是同步的,這個類的一些方法保證了Vector中的對象的線程安全的,而ArrayList則是異步的,因此ArrayList中的對象并不 是線程安全的,因為同步要求會影響執行的效率,所以你不需要線程安全的集合那么使用ArrayList是一個很好的選擇,這樣可以避免由于同步帶來的不必 要的性能開銷。

  2.數據增長:

  從內部實現的機制來講,ArrayList和Vector都是使用數組(Array)來控制集合中的對象,當你向兩種類型中增加元素的時候,如果元素的數目超過了內部數組目前的長度他們都需要擴展內部數組的長度,Vector缺省情況下自動增長原來一倍的數組長度,ArrayList是原來的50%,所以最后你獲得的這個集合所占的空間總是比你實際需要的要大,所以如果你要在集合中保存大量的數據,那么使用Vector有一些優勢,因為你可以通過設置集合的初始大小來避免不必要的資源開銷。

  總結:

  1)如果要求線程安全,使用Vector,Hashtable

  2)如果不要求線程安全,使用ArrayList,LinkedList,HashMap

  3)如果要求鍵值對,則使用HashMap,Hashtable

  4)如果數據量很大,又要求線程安全考慮Vector

  1.ArrayList: 元素單個,效率高,多用于查詢

  2.Vector: 元素單個,線程安全,多用于查詢

  3.LinkedList:元素單個,多用于插入和刪除

  4.HashMap: 元素成對,元素可為空

  5.HashTable: 元素成對,線程安全,元素不可為空

  ArrayList

  底層是Object數組,所以ArrayList具有數組的查詢速度快的優點以及增刪速度慢的缺點。

  而在LinkedList的底層是一種雙向循環鏈表。在此鏈表上每一個數據節點都由三部分組成:前指針(指向前面的節點的位置),數據,后指針(指向后面的節點的位置)。最后一個節點的后指針指向第一個節點的前指針,形成一個循環。

  雙向循環鏈表的查詢效率低但是增刪效率高。

  ArrayList和LinkedList在用法上沒有區別,但是在功能上還是有區別的。

  LinkedList

  經常用在增刪操作較多而查詢操作很少的情況下:隊列和堆棧。

  隊列:先進先出的數據結構。

  棧:后進先出的數據結構。

  注意:使用棧的時候一定不能提供方法讓不是最后一個元素的元素獲得出棧的機會。

  Vector

  (與ArrayList相似,區別是Vector是重量級的組件,使用使消耗的資源比較多。)

  結論:在考慮并發的情況下用Vector(保證線程的安全)。

  在不考慮并發的情況下用ArrayList(不能保證線程的安全)。

  面試經驗(知識點):

  java.util.stack(stack即為堆棧)的父類為Vector。可是stack的父類是最不應該為Vector的。因為Vector的底層是數組,且Vector有get方法(意味著它可能訪問到并不屬于最后一個位置元素的其他元素,很不安全)。

  對于堆棧和隊列只能用push類和get類。

  Stack類以后不要輕易使用。

  實現棧一定要用LinkedList。

  (在JAVA1.5中,collection有queue來實現隊列。)

  Set-HashSet實現類:

  遍歷一個Set的方法只有一個:迭代器(interator)。

  HashSet中元素是無序的(這個無序指的是數據的添加順序和后來的排列順序不同),而且元素不可重復。

  在Object中除了有finalize(),toString(),equals(),還有hashCode()。

  HashSet底層用的也是數組。

  當向數組中利用add(Object o)添加對象的時候,系統先找對象的hashCode:

  int hc=o.hashCode(); 返回的hashCode為整數值。

  Int I=hc%n;(n為數組的長度),取得余數后,利用余數向數組中相應的位置添加數據,以n為6為例,如果I=0則放在數組a[0]位置,如果I=1,則 放在數組a[1]位置。如果equals()返回的值為true,則說明數據重復。如果equals()返回的值為false,則再找其他的位置進行比 較。這樣的機制就導致兩個相同的對象有可能重復地添加到數組中,因為他們的hashCode不同。

  如果我們能夠使兩個相同的對象具有相同hashcode,才能在equals()返回為真。

  在實例中,定義student對象時覆蓋它的hashcode。

  因為String類是自動覆蓋的,所以當比較String類的對象的時候,就不會出現有兩個相同的string對象的情況。

  現在,在大部分的JDK中,都已經要求覆蓋了hashCode。

  結論:如將自定義類用hashSet來添加對象,一定要覆蓋hashcode()和equals(),覆蓋的原則是保證當兩個對象hashcode返回相同的整數,而且equals()返回值為True。

  如果偷懶,沒有設定equals(),就會造成返回hashCode雖然結果相同,但在程序執行的過程中會多次地調用equals(),從而影響程序執行的效率。

  我們要保證相同對象的返回的hashCode一定相同,也要保證不相同的對象的hashCode盡可能不同(因為數組的邊界性,hashCode還是可能相同的)。

  例子:  

public int hashCode(){
  return name.hashcode()+age;
  }

  這個例子保證了相同姓名和年齡的記錄返回的hashCode是相同的。

  使用hashSet的優點:

  hashSet的底層是數組,其查詢效率非常高。而且在增加和刪除的時候由于運用的hashCode的比較開確定添加元素的位置,所以不存在元素的偏移,所以效率也非常高。因為hashSet查詢和刪除和增加元素的效率都非常高。

  但是hashSet增刪的高效率是通過花費大量的空間換來的:因為空間越大,取余數相同的情況就越小。HashSet這種算法會建立許多無用的空間。

  使用hashSet類時要注意,如果發生沖突,就會出現遍歷整個數組的情況,這樣就使得效率非常的低。

Java五個最常用的集合類之間的區別和聯系

       以上就是動力節點Java培訓機構小編介紹的“Java五個最常用的集合類之間的區別和聯系”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

  Java入門到項目免費學習視頻:

  Java零基礎必學視頻:http://m.dabaquan.cn/v104/

  Java入門到精通視頻教程:http://m.dabaquan.cn/video.html

  Java技術教程:http://m.dabaquan.cn/tutorial/

       相關文章

  零基礎怎么自學Java,完整版Java學習路線圖

  你還在糾結學Java,是自學還是去培訓班嗎

  一個標準的Java程序員如何進階?

  Java學習路線清單,快速進階Java

  Java編程初學者要如何進階

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日本一级特黄毛片免费视频9 | 精品免费视在线视频观看 | 国产亚洲综合视频 | 亚洲综合色播 | 99re久久资源最新地址 | 久久99热久久精品动漫 | 99热碰| 欧美一级aa天码毛片 | 久久大香伊蕉在人线国产昨爱 | 亚洲精品成人在线 | 看全色黄大色大片免费视频 | 国产精品 第二页 | 国产在视频线精品www666 | 日本人又黄又爽免费视频 | 337p欧美超大胆日本人术艺术 | 老子影院午夜伦不卡亚洲 | 日本不卡专区 | 欧美性猛交xxxx免费看久久久 | 国产视频一二 | 四虎永久网址 | 99热在线免费观看 | 天天操夜夜操天天操 | 日本一区二区三区在线观看 | 国产舐足视频在线观看 | 欧美亚洲激情 | 老司机午夜精品视频 | 91精选在线观看 | 精品一区 二区三区免费毛片 | 亚洲欧美一区二区三区在线 | 中国国产成人精品久久 | 国产三级久久久精品麻豆三级 | 国产伦精品一区三区视频 | 成 人 黄 片 大全 | 国产偷久久 | 国产欧美精品午夜在线播放 | 日韩欧美伊人久久大香线蕉 | 99热久久这里只精品 | 亚洲欧美国产另类 | 97视屏| 香蕉久人久人青草青草 | 福利岛国深夜在线 |