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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java初級(jí)面試題框架問題

Java初級(jí)面試題框架問題

更新時(shí)間:2020-02-28 11:04:32 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2527次


  1.HashMap和HashTable的區(qū)別?


  HashMap不是線程安全的


  HashMap是map接口的實(shí)現(xiàn)類,是將鍵映射到值的對象,其中鍵和值都是對象,并且不能包含重復(fù)鍵,但可以包含重復(fù)值。HashMap允許nullkey和nullvalue,而HashTable不允許。


  HashTable是線程安全Collection。


  HashMap是HashTable的輕量級(jí)實(shí)現(xiàn),他們都完成了Map接口,主要區(qū)別在于HashMap允許nullkey和nullvalue,由于非線程安全,效率上可能高于Hashtable。


  區(qū)別:


  HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。


  HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。


  HashTable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Mapinterface的一個(gè)實(shí)現(xiàn)。


  HashTable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步。


  2.說一下HashMap的底層結(jié)構(gòu)?


  HashMap的主干是一個(gè)Entry數(shù)組。Entry是HashMap的基本組成單元,每一個(gè)Entry包含一個(gè)key-value鍵值對。整體結(jié)構(gòu)圖:


Java初級(jí)面試題框架問題

  HashMap由數(shù)組+鏈表組成的。


  數(shù)組是HashMap的主體,鏈表則是主要為了解決哈希沖突而存在的,如果定位到的數(shù)組位置不含鏈表(當(dāng)前entry的next指向null),那么對于查找,添加等操作很快,僅需一次尋址即可;如果定位到的數(shù)組包含鏈表,對于添加操作,其時(shí)間復(fù)雜度為O(n),首先遍歷鏈表,存在即覆蓋,否則新增;對于查找操作來講,仍需遍歷鏈表,然后通過key對象的equals方法逐一比對查找。所以,性能考慮,HashMap中的鏈表出現(xiàn)越少,性能才會(huì)越好。


  3.為什么HashMap是線程不安全的


  見20期:【20期】你知道為什么HashMap是線程不安全的嗎?


  4.ArrayList和LinkedList的區(qū)別是什么?


  ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)。


  對于隨機(jī)訪問get和set,ArrayList覺得優(yōu)于LinkedList,因?yàn)長inkedList要移動(dòng)指針。


  對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢,因?yàn)锳rrayList要移動(dòng)數(shù)據(jù)。


  5.ArrayList和Vector的區(qū)別是什么?


  1.同步性:


  Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不同步的。如果只有一個(gè)線程會(huì)訪問到集合,那最好是使用ArrayList,因?yàn)樗豢紤]線程安全,效率會(huì)高些;如果有多個(gè)線程會(huì)訪問到集合,那最好是使用Vector,因?yàn)椴恍枰覀冏约涸偃タ紤]和編寫線程安全的代碼。


  PS:對于Vector&ArrayList、Hashtable&HashMap,要記住線程安全的問題,記住Vector與Hashtable是舊的,是java一誕生就提供了的,它們是線程安全的,ArrayList與HashMap是java2時(shí)才提供的,它們是線程不安全的。所以,我們講課時(shí)先講老的。


  2.數(shù)據(jù)增長:


  ArrayList與Vector都有一個(gè)初始的容量大小,當(dāng)存儲(chǔ)進(jìn)它們里面的元素的個(gè)數(shù)超過了容量時(shí),就需要增加ArrayList與Vector的存儲(chǔ)空間,每次要增加存儲(chǔ)空間時(shí),不是只增加一個(gè)存儲(chǔ)單元,而是增加多個(gè)存儲(chǔ)單元,每次增加的存儲(chǔ)單元的個(gè)數(shù)在內(nèi)存空間利用與程序效率之間要取得一定的平衡。


  Vector默認(rèn)增長為原來兩倍,而ArrayList的增長策略在文檔中沒有明確規(guī)定(從源代碼看到的是增長為原來的1.5倍)。ArrayList與Vector都可以設(shè)置初始的空間大小,Vector還可以設(shè)置增長的空間大小,而ArrayList沒有提供設(shè)置增長空間的方法。


  即Vector增長原來的一倍,ArrayList增加原來的0.5倍。


  6.Array和ArrayList有何區(qū)別?


  Array可以包含基本數(shù)據(jù)類型和引用類型,ArrayList只能包含引用類型。


  ArrayList是基于數(shù)組實(shí)現(xiàn)的,Array大小不可以調(diào)整大小,但ArrayList可以通過內(nèi)部方法自動(dòng)調(diào)整容量。


  ArrayList是List接口的實(shí)現(xiàn)類,相比Array支持更多的方法和特性。


  7.說一下HashSet的實(shí)現(xiàn)原理?


  1.HashSet是基于HashMap實(shí)現(xiàn)的,默認(rèn)構(gòu)造函數(shù)是構(gòu)建一個(gè)初始容量為16,負(fù)載因子為0.75的HashMap。封裝了一個(gè)HashMap對象來存儲(chǔ)所有的集合元素,所有放入HashSet中的集合元素實(shí)際上由HashMap的key來保存,而HashMap的value則存儲(chǔ)了一個(gè)PRESENT,它是一個(gè)靜態(tài)的Object對象。


  2.當(dāng)我們試圖把某個(gè)類的對象當(dāng)成HashMap的key,或試圖將這個(gè)類的對象放入HashSet中保存時(shí),重寫該類的equals(Objectobj)方法和hashCode()方法很重要,而且這兩個(gè)方法的返回值必須保持一致:當(dāng)該類的兩個(gè)的hashCode()返回值相同時(shí),它們通過equals()方法比較也應(yīng)該返回true。通常來說,所有參與計(jì)算hashCode()返回值的關(guān)鍵屬性,都應(yīng)該用于作為equals()比較的標(biāo)準(zhǔn)。


  3.HashSet的其他操作都是基于HashMap的。


  8.如何決定使用HashMap還是TreeMap?


  見03期:【03期】如何決定使用HashMap還是TreeMap?


  9.List、Set、Map之間的區(qū)別是什么?


  List(列表)


  List的元素以線性方式存儲(chǔ),可以存放重復(fù)對象,List主要有以下兩個(gè)實(shí)現(xiàn)類:


  1.ArrayList:長度可變的數(shù)組,可以對元素進(jìn)行隨機(jī)的訪問,向ArrayList中插入與刪除元素的速度慢。JDK8中ArrayList擴(kuò)容的實(shí)現(xiàn)是通過grow()方法里使用語句newCapacity=oldCapacity+(oldCapacity>>1)(即1.5倍擴(kuò)容)計(jì)算容量,然后調(diào)用Arrays.copyof()方法進(jìn)行對原數(shù)組進(jìn)行復(fù)制。


  LinkedList:采用鏈表數(shù)據(jù)結(jié)構(gòu),插入和刪除速度快,但訪問速度慢。


  Set(集合)


  Set中的對象不按特定(HashCode)的方式排序,并且沒有重復(fù)對象,Set主要有以下兩個(gè)實(shí)現(xiàn)類:


  1.HashSet:HashSet按照哈希算法來存取集合中的對象,存取速度比較快。當(dāng)HashSet中的元素個(gè)數(shù)超過數(shù)組大小*loadFactor(默認(rèn)值為0.75)時(shí),就會(huì)進(jìn)行近似兩倍擴(kuò)容(newCapacity=(oldCapacity<<1)+1)。


  2.TreeSet:TreeSet實(shí)現(xiàn)了SortedSet接口,能夠?qū)现械膶ο筮M(jìn)行排序。


  Map(映射)


  Map是一種把鍵對象和值對象映射的集合,它的每一個(gè)元素都包含一個(gè)鍵對象和值對象。Map主要有以下實(shí)現(xiàn)類:


  HashMap:HashMap基于散列表實(shí)現(xiàn),其插入和查詢<K,V>的開銷是固定的,可以通過構(gòu)造器設(shè)置容量和負(fù)載因子來調(diào)整容器的性能。


  LinkedHashMap:類似于HashMap,但是迭代遍歷它時(shí),取得<K,V>的順序是其插入次序,或者是最近最少使用(LRU)的次序。


  TreeMap:TreeMap基于紅黑樹實(shí)現(xiàn)。查看<K,V>時(shí),它們會(huì)被排序。TreeMap是唯一的帶有subMap()方法的Map,subMap()可以返回一個(gè)子樹。


Java初級(jí)面試題框架問題


      以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java初級(jí)面試題框架問題”的內(nèi)容,希望對大家有幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


提交申請后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 2020亚洲欧美日韩在线观看 | 波多野结衣久久精品免费播放 | 日本在线观看永久免费网站 | 久久久久久夜精品精品免费 | 国产精品视频观看 | 欧美在线一区二区三区精品 | 天天玩天天操 | 欧美激情久久久久久久大片 | 久久久精品视频在线观看 | 日本精品视频 | 欧美在线观看一区二区三 | 久操视频在线观看 | 国产一区二区高清 | 色天天色综合 | 精品国产一区二区三区免费 | 天天操天天射天天操 | 97久久久久国产精品嫩草影院 | 国产精品揄拍100视频 | 欧美午夜性春猛交 | 亚洲免费视频在线观看 | 欧美专区亚洲 | 天天做天天爱天天爽天天综合 | 久草视频在线免费看 | 亚洲欧美日韩中字综合 | 男女www| 夜夜躁日日躁狠狠 | fxxxx性欧美高清 | 中国大陆一级毛片 免费 | 日本高清h色视频在线观看 日本高清不卡二区 | 国产精品久久久久影视不卡 | 久草最新 | 色花堂国产精品第二页 | 巨骚综合网 | 国产欧美久久精品 | 97色精品视频在线观看免费 | 性生活免费视频网站 | 国产一区二区在线视频观看 | 久久久久久亚洲精品 | 日日摸夜夜摸狠狠摸日日碰夜夜做 | 亚洲国产欧洲精品路线久久 | 久久99国产精品久久 |