Java面試題(容器)

18. java 容器都有哪些渗勘?

常用容器的圖錄:

常用容器

19. Collection 和 Collections 有什么區(qū)別?

  • java.util.Collection 是一個(gè)集合接口(集合類的一個(gè)頂級(jí)接口)库菲。它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法颂翼。Collection接口在Java 類庫(kù)中有很多具體的實(shí)現(xiàn)韩玩。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式枪蘑,其直接繼承接口有List與Set损谦。
  • Collections則是集合類的一個(gè)工具類/幫助類,其中提供了一系列靜態(tài)方法岳颇,用于對(duì)集合中元素進(jìn)行排序照捡、搜索以及線程安全等各種操作。

20. List赦役、Set麻敌、Map 之間的區(qū)別是什么?

List掂摔、Set术羔、Map 之間的區(qū)別

21. HashMap 和 Hashtable 有什么區(qū)別?

  • hashMap去掉了HashTable 的contains方法乙漓,但是加上了containsValue()和containsKey()方法级历。
  • hashTable同步的,而HashMap是非同步的叭披,效率上比hashTable要高寥殖。
  • hashMap允許空鍵值,而hashTable不允許涩蜘。

22. 如何決定使用 HashMap 還是 TreeMap嚼贡?

對(duì)于在Map中插入、刪除和定位元素這類操作同诫,HashMap是最好的選擇粤策。然而,假如你需要對(duì)一個(gè)有序的key集合進(jìn)行遍歷误窖,TreeMap是更好的選擇叮盘。基于你的collection的大小霹俺,也許向HashMap中添加元素會(huì)更快柔吼,將map換為TreeMap進(jìn)行有序key的遍歷。

23. 說(shuō)一下 HashMap 的實(shí)現(xiàn)原理丙唧?

  • HashMap概述: HashMap是基于哈希表的Map接口的非同步實(shí)現(xiàn)愈魏。此實(shí)現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵想际。此類不保證映射的順序培漏,特別是它不保證該順序恒久不變。
  • HashMap的數(shù)據(jù)結(jié)構(gòu): 在java編程語(yǔ)言中沼琉,最基本的結(jié)構(gòu)就是兩種北苟,一個(gè)是數(shù)組,另外一個(gè)是模擬指針(引用)打瘪,所有的數(shù)據(jù)結(jié)構(gòu)都可以用這兩個(gè)基本結(jié)構(gòu)來(lái)構(gòu)造的友鼻,HashMap也不例外。HashMap實(shí)際上是一個(gè)“鏈表散列”的數(shù)據(jù)結(jié)構(gòu)闺骚,即數(shù)組和鏈表的結(jié)合體彩扔。

當(dāng)我們往Hashmap中put元素時(shí),首先根據(jù)key的hashcode重新計(jì)算hash值,根絕hash值得到這個(gè)元素在數(shù)組中的位置(下標(biāo)),如果該數(shù)組在該位置上已經(jīng)存放了其他元素,那么在這個(gè)位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的放入鏈尾.如果數(shù)組中該位置沒(méi)有元素,就直接將該元素放到數(shù)組的該位置上。

需要注意Jdk 1.8中對(duì)HashMap的實(shí)現(xiàn)做了優(yōu)化,當(dāng)鏈表中的節(jié)點(diǎn)數(shù)據(jù)超過(guò)八個(gè)之后,該鏈表會(huì)轉(zhuǎn)為紅黑樹(shù)來(lái)提高查詢效率,從原來(lái)的O(n)到O(logn)

24. 說(shuō)一下 HashSet 的實(shí)現(xiàn)原理僻爽?

  • HashSet底層由HashMap實(shí)現(xiàn)
  • HashSet的值存放于HashMap的key上
  • HashMap的value統(tǒng)一為PRESENT

25. ArrayList 和 LinkedList 的區(qū)別是什么虫碉?

最明顯的區(qū)別是 ArrrayList底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,支持隨機(jī)訪問(wèn)胸梆,而 LinkedList 的底層數(shù)據(jù)結(jié)構(gòu)是雙向循環(huán)鏈表敦捧,不支持隨機(jī)訪問(wèn)须板。使用下標(biāo)訪問(wèn)一個(gè)元素,ArrayList 的時(shí)間復(fù)雜度是 O(1)兢卵,而 LinkedList 是 O(n)习瑰。

26. 如何實(shí)現(xiàn)數(shù)組和 List 之間的轉(zhuǎn)換?

  • List轉(zhuǎn)換成為數(shù)組:調(diào)用ArrayList的toArray方法秽荤。
  • 數(shù)組轉(zhuǎn)換成為L(zhǎng)ist:調(diào)用Arrays的asList方法甜奄。

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

  • Vector是同步的窃款,而ArrayList不是课兄。然而,如果你尋求在迭代的時(shí)候?qū)α斜磉M(jìn)行改變晨继,你應(yīng)該使用CopyOnWriteArrayList烟阐。
  • ArrayList比Vector快,它因?yàn)橛型锦馍裕粫?huì)過(guò)載曲饱。
  • ArrayList更加通用,因?yàn)槲覀兛梢允褂肅ollections工具類輕易地獲取同步列表和只讀列表珠月。

28. Array 和 ArrayList 有何區(qū)別扩淀?

  • Array可以容納基本類型和對(duì)象,而ArrayList只能容納對(duì)象啤挎。
  • Array是指定大小后不可變的驻谆,而ArrayList大小是可變的。
  • Array沒(méi)有提供ArrayList那么多功能庆聘,比如addAll胜臊、removeAll和iterator等。

29. 在 Queue 中 poll()和 remove()有什么區(qū)別伙判?

poll() 和 remove() 都是從隊(duì)列中取出一個(gè)元素象对,但是 poll() 在獲取元素失敗的時(shí)候會(huì)返回空,但是 remove() 失敗的時(shí)候會(huì)拋出異常宴抚。

30. 哪些集合類是線程安全的勒魔?

  • vector:就比arraylist多了個(gè)同步化機(jī)制(線程安全),因?yàn)樾瘦^低菇曲,現(xiàn)在已經(jīng)不太建議使用冠绢。在web應(yīng)用中,特別是前臺(tái)頁(yè)面常潮,往往效率(頁(yè)面響應(yīng)速度)是優(yōu)先考慮的弟胀。
  • statck:堆棧類,先進(jìn)后出。
  • hashtable:就比hashmap多了個(gè)線程安全孵户。
  • enumeration:枚舉萧朝,相當(dāng)于迭代器。

31. 迭代器 Iterator 是什么延届?

迭代器是一種設(shè)計(jì)模式剪勿,它是一個(gè)對(duì)象贸诚,它可以遍歷并選擇序列中的對(duì)象方庭,而開(kāi)發(fā)人員不需要了解該序列的底層結(jié)構(gòu)。迭代器通常被稱為“輕量級(jí)”對(duì)象酱固,因?yàn)閯?chuàng)建它的代價(jià)小械念。

32. Iterator 怎么使用?有什么特點(diǎn)运悲?

Java中的Iterator功能比較簡(jiǎn)單龄减,并且只能單向移動(dòng):

  1. 使用方法iterator()要求容器返回一個(gè)Iterator。第一次調(diào)用Iterator的next()方法時(shí)班眯,它返回序列的第一個(gè)元素希停。注意:iterator()方法是java.lang.Iterable接口,被Collection繼承。
  2. 使用next()獲得序列中的下一個(gè)元素署隘。
  3. 使用hasNext()檢查序列中是否還有元素宠能。
  4. 使用remove()將迭代器新返回的元素刪除。

Iterator是Java迭代器最簡(jiǎn)單的實(shí)現(xiàn)磁餐,為L(zhǎng)ist設(shè)計(jì)的ListIterator具有更多的功能违崇,它可以從兩個(gè)方向遍歷List,也可以從List中插入和刪除元素诊霹。

33. Iterator 和 ListIterator 有什么區(qū)別羞延?

  • Iterator可用來(lái)遍歷Set和List集合,但是ListIterator只能用來(lái)遍歷List脾还。
  • Iterator對(duì)集合只能是前向遍歷伴箩,ListIterator既可以前向也可以后向。
  • ListIterator實(shí)現(xiàn)了Iterator接口鄙漏,并包含其他的功能嗤谚,比如:增加元素,替換元素泥张,獲取前一個(gè)和后一個(gè)元素的索引,等等媚创。

目錄:2020最新Java面試題及答案匯總(上)
目錄:2020最新Java面試題及答案匯總(下)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渗钉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳄橘,老刑警劉巖声离,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瘫怜,居然都是意外死亡术徊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門鲸湃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赠涮,“玉大人,你說(shuō)我怎么就攤上這事暗挑∷癯” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵炸裆,是天一觀的道長(zhǎng)垃它。 經(jīng)常有香客問(wèn)我,道長(zhǎng)烹看,這世上最難降的妖魔是什么国拇? 我笑而不...
    開(kāi)封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮惯殊,結(jié)果婚禮上酱吝,老公的妹妹穿的比我還像新娘。我一直安慰自己靠胜,他們只是感情好掉瞳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著浪漠,像睡著了一般陕习。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上址愿,一...
    開(kāi)封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天该镣,我揣著相機(jī)與錄音,去河邊找鬼响谓。 笑死损合,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的娘纷。 我是一名探鬼主播嫁审,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赖晶!你這毒婦竟也來(lái)了律适?” 一聲冷哼從身側(cè)響起辐烂,我...
    開(kāi)封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捂贿,沒(méi)想到半個(gè)月后纠修,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厂僧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年扣草,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颜屠。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辰妙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汽纤,到底是詐尸還是另有隱情上岗,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布蕴坪,位于F島的核電站,受9級(jí)特大地震影響敬锐,放射性物質(zhì)發(fā)生泄漏背传。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一台夺、第九天 我趴在偏房一處隱蔽的房頂上張望径玖。 院中可真熱鬧,春花似錦颤介、人聲如沸梳星。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冤灾。三九已至,卻和暖如春辕近,著一層夾襖步出監(jiān)牢的瞬間韵吨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工移宅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留归粉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓漏峰,卻偏偏與公主長(zhǎng)得像糠悼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浅乔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • ArrayList實(shí)現(xiàn)原理要點(diǎn)概括 參考文獻(xiàn):http://zhangshixi.iteye.com/blog/6...
    晨光光閱讀 1,064評(píng)論 0 1
  • Java集合類可用于存儲(chǔ)數(shù)量不等的對(duì)象,并可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊(duì)列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,922評(píng)論 0 13
  • 1.Java集合框架是什么倔喂?說(shuō)出一些集合框架的優(yōu)點(diǎn)? 每種編程語(yǔ)言中都有集合,最初的Java版本包含幾種集合類:V...
    Oneisall_81a5閱讀 899評(píng)論 0 11
  • java基礎(chǔ) 集合承繼包含圖 Collection vs Collections 首先滴劲,"Collection" ...
    onlyHalfSoul閱讀 1,301評(píng)論 0 5
  • hashmap實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)攻晒,數(shù)組、桶等班挖。 如圖所示 JDK 1.7鲁捏,是以數(shù)組+鏈表組成的,鏈表為相同hash的鍵...
    不需要任何閱讀 820評(píng)論 0 1