Java程式設計師集合框架面試題

2021-01-10 站長之家

Java集合框架是最常被問到的Java面試問題,要理解Java技術強大特性就有必要掌握集合框架。這裡有一些實用問題,常在核心Java面試中問到。

1、什麼是Java集合API

Java集合框架API是用來表示和操作集合的統一框架,它包含接口、實現類、以及幫助程式設計師完成一些編程的算法。簡言之,API在上層完成以下幾件事:

● 編程更加省力,提高城程序速度和代碼質量

● 非關聯的API提高互操作性

● 節省學習使用新API成本

● 節省設計新API的時間

● 鼓勵、促進軟體重用

具體來說,有6個集合接口,最基本的是Collection接口,由三個接口Set、List、SortedSet繼承,另外兩個接口是Map、SortedMap,這兩個接口不繼承Collection,表示映射而不是真正的集合。

2、什麼是Iterator

一些集合類提供了內容遍歷的功能,通過java.util.Iterator接口。這些接口允許遍歷對象的集合。依次操作每個元素對象。當使用Iterators時,在獲得Iterator的時候包含一個集合快照。通常在遍歷一個Iterator的時候不建議修改集合本省。

3、Iterator與ListIterator有什麼區別?

Iterator:只能正向遍歷集合,適用於獲取移除元素。ListIerator:繼承Iterator,可以雙向列表的遍歷,同樣支持元素的修改。

4、什麼是HaspMap和Map?

Map是接口,Java 集合框架中一部分,用於存儲鍵值對,HashMap是用哈希算法實現Map的類。

5、HashMap與HashTable有什麼區別?對比Hashtable VS HashMap

兩者都是用key-value方式獲取數據。Hashtable是原始集合類之一(也稱作遺留類)。HashMap作為新集合框架的一部分在Java2的1.2版本中加入。它們之間有一下區別:

● HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允許null值作為key和value,而Hashtable不可以)。

● HashMap沒法保證映射的順序一直不變,但是作為HashMap的子類LinkedHashMap,如果想要預知的順序迭代(默認按照插入順序),你可以很輕易的置換為HashMap,如果使用Hashtable就沒那麼容易了。

● HashMap不是同步的,而Hashtable是同步的。

● 迭代HashMap採用快速失敗機制,而Hashtable不是,所以這是設計的考慮點。

6、在Hashtable上下文中同步是什麼意思?

同步意味著在一個時間點只能有一個線程可以修改哈希表,任何線程在執行hashtable的更新操作前需要獲取對象鎖,其他線程等待鎖的釋放。

7、什麼叫做快速失敗特性

從高級別層次來說快速失敗是一個系統或軟體對於其故障做出的響應。一個快速失敗系統設計用來即時報告可能會導致失敗的任何故障情況,它通常用來停止正常的操作而不是嘗試繼續做可能有缺陷的工作。當有問題發生時,快速失敗系統即時可見地發錯錯誤告警。在Java中,快速失敗與iterators有關。如果一個iterator在集合對象上創建了,其它線程欲「結構化」的修改該集合對象,並發修改異常 (ConcurrentModificationException) 拋出。

8、怎樣使Hashmap同步?

HashMap可以通過Map m = Collections.synchronizedMap(hashMap)來達到同步的效果。

9、什麼時候使用Hashtable,什麼時候使用HashMap

基本的不同點是Hashtable同步HashMap不是的,所以無論什麼時候有多個線程訪問相同實例的可能時,就應該使用Hashtable,反之使用HashMap。非線程安全的數據結構能帶來更好的性能。

如果在將來有一種可能—你需要按順序獲得鍵值對的方案時,HashMap是一個很好的選擇,因為有HashMap的一個子類LinkedHashMap。所以如果你想可預測的按順序迭代(默認按插入的順序),你可以很方便用LinkedHashMap替換HashMap。反觀要是使用的Hashtable就沒那麼簡單了。同時如果有多個線程訪問HashMap,Collections.synchronizedMap()可以代替,總的來說HashMap更靈活。

10、為什麼Vector類認為是廢棄的或者是非官方地不推薦使用?或者說為什麼我們應該一直使用ArrayList而不是Vector

你應該使用ArrayList而不是Vector是因為默認情況下你是非同步訪問的,Vector同步了每個方法,你幾乎從不要那樣做,通常有想要同步的是整個操作序列。同步單個的操作也不安全(如果你迭代一個Vector,你還是要加鎖,以避免其它線程在同一時刻改變集合)。而且效率更慢。當然同樣有鎖的開銷即使你不需要,這是個很糟糕的方法在默認情況下同步訪問。你可以一直使用Collections.sychronizedList來裝飾一個集合。

事實上Vector結合了「可變數組」的集合和同步每個操作的實現。這是另外一個設計上的缺陷。Vector還有些遺留的方法在枚舉和元素獲取的方法,這些方法不同於List接口,如果這些方法在代碼中程式設計師更趨向於想用它。儘管枚舉速度更快,但是他們不能檢查如果集合在迭代的時候修改了,這樣將導致問題。儘管以上諸多原因,oracle也從沒宣稱過要廢棄Vector.

原文:Sachin FromDev 編譯:伯樂在線 – 劉志軍

相關焦點

  • Java集合類框架
    作者丨Henry扶蘇來源丨Henry扶蘇簡介        在平時的開發裡我們經常用到集合框架
  • 阿里螞蟻金服Java程式設計師面試的11個問題,你會幾個呢?
    此前,w3cschool app開發者頭條上分享了各種的名企程式設計師面經。比如阿里巴巴java面經、小米java面經、網易java面經等,吸引了大多數的程式設計師們的圍觀。在分享螞蟻金服Java程式設計師面經前,不妨來看下Java程式設計師面試時要注意3大要點:0、重視基礎在面試之前,有必要將基礎的知識點重新過一遍,比如並發優缺點、內存可見性、鎖、同步、線程池框架等。
  • 程式設計師:java集合介紹,帶你深入理解list集合
    在Java中,集合類通常存在於java.util包中。Java集合主要由2大體系構成,分別是Collection體系和Map體系,其中Collection和Map分別是2大體系中的頂層接口。Collection主要有三個子接口,分別為List(列表)、Set(集)、Queue(隊列)。其中,List、Queue中的元素有序可重複,而Set中的元素無序不可重複。
  • 程式設計師學Java要關注的6個網站,你知道幾個呢?
    下面w3cschool給程式設計師小夥伴們分享java學習的6個網站:0、SourgeForgeSourgeForge是開源軟體開發者進行開發管理的集中式網站。有相當豐富的Java開放原始碼的著名的軟體。1、w3cschool網站有不少入門Java的程式設計師學了幾個月一頭霧水,抓不住一些重點、核心的編程知識點。還有一些程式設計師感覺到編程過於枯燥,靜不下心來學習。
  • Javaweb開發學習路線及Java三大框架分享
    Java在客戶端的應用有java applet,不過使用得很少,Java在伺服器端的應用非常的豐富,比如Servlet,JSP和第三方框架等等。Java技術對Web領域的發展注入了強大的動力。1: 熟悉jdk,jvm,eclipse,安裝於配置jdk2:熟悉並掌握java的基礎語法,類,抽象類,接口,內部類等概念3: java核心編程,如輸入輸出流,多線程,集合,XML,正則表達式等4:java圖形化編程,如awt,swing
  • Java 集合框架面試問題集錦
    (點擊上方公眾號,可快速關注)來源:ImportNew - 朱偉傑Java集合框架(例如基本的數據結構)裡包含了最常見的
  • Java集合框架——面試必備
    Java集合框架面試題常見集合集合可以看作是一種容器,用來存儲對象信息。數組和集合的區別:(1)數組長度不可變化而且無法保存具有映射關係的數據;集合類用於保存數量不確定的數據,以及保存具有映射關係的數據。
  • 精選11道Java技術面試題並有答案(包含部分阿里和華為的面試題)
    類加載機制:類的加載指的是將類的.class文件中的二進位數據讀入到內存中,將其放在運行時數據區的方法去內,然後在堆區創建一個java.lang.Class對象,用來封裝在方法區內的數據結構。類的加載最終是在堆區內的Class對象,Class對象封裝了類在方法區內的數據結構,並且向Java程式設計師提供了訪問方法區內的數據結構的接口。
  • Java程式設計師進階:Java4大核心基礎必備知識點
    要知道java是分兩部分的:一個是編譯,一個是運行。javac:負責的是編譯的部分,當執行javac時,會啟動java的編譯器程序。對指定擴展名的.java文件進行編譯,生成了jvm可以識別的字節碼文件,也就是class文件,也就是java的運行程序。
  • 作為一個Java 程式設計師 你應該會什麼
    4、API:Java 的核心API 是非常龐大的,但是有一些內容筆者認為是Java程式設計師必須熟悉的,否則不可能熟練的運用Java,包括:◆java.lang 包下的80%以上的類的功能的靈活運用。◆java.util 包下的80%以上的類的靈活運用,特別是集合類體系、規則 表達式、zip、以及時間、隨機數、屬性、資源和Timer.◆java.io 包下的60%以上的類的使用,理解IO 體系的基於管道模型的設計思路以及常用IO 類的特性和使用場合。◆java.math 包下的100%的內容。
  • Java 程式設計師必讀的 9 本書
    連結:https://hackernoon.com/10-best-java-books-for-beginners-and-advanced-developers-z27r3wvs如果你一名Java程式設計師,並且想知道如何通過閱讀書籍來提高自己的Java技能水平,那你今天算是來對地方了,在本文,我將分享一些有史以來我讀過的最好的Java書籍,這些書籍非但沒有因為時間的流逝而過時
  • Java程式設計師崗位多,速來!
    不過,每年的這個時候,總會有一些不和諧的聲音出現,比如Java程式設計師已經爛大街啦巴拉巴拉。可是,什麼叫爛大街了,難道僅僅是因為從事這個語言開發的人多麼?在古代習武的人很多,你能說武功絕技它不香嗎?反過來講,一個事物普遍的存在,正說明了它的受歡迎程度和應用價值。其廣泛的應用場景、眾多的開發者,不正說明了它的江湖地位很高嗎?
  • Java 程式設計師如何使用 Shiro 框架
    因此Realm是整個框架中為數不多的必須由設計者自行實現的模塊,當然Shiro提供了多種實現的途徑,本文只介紹最常見也最重要的一種實現方式——資料庫查詢。4、兩條重要的英文我在學習Shiro的過程中遇到的第一個障礙就是這兩個對象的英文名稱:AuthorizationInfo,AuthenticationInfo。
  • Lambda表達式和Java集合框架
    www.cnblogs.com/CarpenterLee/p/6507161.html作者:CarpenterLeeJava8為容器新增一些有用的方法,這些方法有些是為完善原有功能,有些是為引入函數式編程(Lambda表達式),學習和使用這些方法有助於我們寫出更加簡潔有效的代碼.本文分別以ArrayList和HashMap為例,講解Java8集合框架
  • 28歲轉行程式設計師,學Java還是Python?碼農:想快點月薪過萬就選它
    身邊也有很多人問我轉行程式設計師難不難,快三十歲了轉行還有沒有戲,對此我的回答都是歡迎轉行程式設計師,程式設計師雖說門檻有點高,但其實並不難。只要熱情能堅持一兩個月基本上就可以了。現在大環境的改變,很多人學編程都直接開始選擇Python,學java 的越來越少。不是說哪種語言好壞,如果要討論哪種語言好的話,還是請各位理性討論。
  • java基礎教程:Collection集合,Collection 常用API
    集合概述在前面基礎班我們已經學習過並使用過集合ArrayList<E> ,那麼集合到底是什麼呢?集合:集合是java中提供的一種容器,可以用來存儲多個數據。集合和數組既然都是容器,它們有什麼區別呢?數組的長度是固定的。集合的長度是可變的。
  • java集合總結-複習
    Map第一張圖裡 List有序有重複,Set無序無重複,這些基本都書序java程式設計師必須知道的一件事情.二叉樹是n(n>=0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由一個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹組成。
  • Java 集合框架看這一篇就夠了
    學習這些集合框架,我認為有 4 個目標:對不同的場景,能夠選擇合適的數據結構並分析優缺點;關於 Map,之前那篇 HashMap 的文章已經講的非常透徹詳盡了,所以本文不再贅述。還有另外一個方法 addAll(),可以把另一個集合裡的元素加到此集合中。boolean addAll(Collection<?
  • java集合詳解合集
    一旦在數組初始化時指定了這個數組長度,這個數組長度就是不可變的,如果我們需要保存一個可以動態增長的數據(在編譯時無法確定具體的數量),java的集合類就是一個很好的設計方案了。集合類主要負責保存、盛裝其他數據,因此集合類也被稱為容器類。
  • java入門必備書籍
    下面我給大家推薦幾本java學習的書籍,java自從出現之後就經久不衰,因為它的跨平臺性和開發效率高,被很多公司使用,現在android應用開發也不例外。1.瘋狂Java講義本書深入介紹了Java編程的相關方面,全書內容覆蓋了Java的基本語法結構、Java的面向對象特徵、Java集合框架體系、Java泛型、異常處理、Java GUI編程、JDBC資料庫編程、Java注釋、Java的IO流體系、