好程式設計師Java培訓分享Java面試題集合篇一

好程式設計師發表於2020-06-16

  好程式設計師 Java培訓分享Java面試題之Java 集合篇 1.Java集合框架是什麼?說出一些集合框架的優點?

   每種程式語言中都有集合,最初的Java版本包含幾種集合類:Vector、Stack、HashTable和Array。隨著集合的廣泛使用,Java1.2提出了囊括所有集合介面、實現和演算法的集合框架。在保證執行緒安全的情況下使用泛型和併發集合類,Java已經經歷了很久。它還包括在Java併發包中,阻塞介面以及它們的實現。集合框架的部分優點如下:

   1)使用核心集合類降低開發成本,而非實現我們自己的集合類。

   2)隨著使用經過嚴格測試的集合框架類,程式碼質量會得到提高。

   3)透過使用JDK附帶的集合類,可以降低程式碼維護成本。

   4)複用性和可操作性。

   2.集合框架中的泛型有什麼優點?

   Java1.5引入了泛型,所有的集合介面和實現都大量地使用它。泛型允許我們為集合提供一個可以容納的物件型別,因此,如果你新增其它型別的任何元素,它會在編譯時報錯。這避免了在執行時出現ClassCastException,因為你將會在編譯時得到報錯資訊。泛型也使得程式碼整潔,我們不需要使用顯式轉換和instanceOf運算子。它也給執行時帶來好處,因為不會產生型別檢查的位元組碼指令。

   3.Java集合框架的基礎介面有哪些?

   Collection為集合層級的根介面。一個集合代表一組物件,這些物件即為它的元素。Java平臺不提供這個介面任何直接的實現。

Set是一個不能包含重複元素的集合。這個介面對數學集合抽象進行建模,被用來代表集合,就如一副牌。

List是一個有序集合,可以包含重複元素。你可以透過它的索引來訪問任何元素。List更像長度動態變換的陣列。

Map是一個將key對映到value的物件.一個Map不能包含重複的key:每個key最多隻能對映一個value。

一些其它的介面有Queue、Dequeue、SortedSet、SortedMap和ListIterator。

   4.為何Collection不從Cloneable和Serializable介面繼承?

   Collection介面指定一組物件,物件即為它的元素。如何維護這些元素由Collection的具體實現決定。例如,一些如List的Collection實現允許重複的元素,而其它的如Set就不允許。很多Collection實現有一個公有的clone方法。然而,把它放到集合的所有實現中也是沒有意義的。這是因為Collection是一個抽象表現。重要的是實現。

當與具體實現打交道的時候,克隆或序列化的語義和含義才發揮作用。所以,具體實現應該決定如何對它進行克隆或序列化,或它是否可以被克隆或序列化。

在所有的實現中授權克隆和序列化,最終導致更少的靈活性和更多的限制。特定的實現應該決定它是否可以被克隆和序列化。

   5.為何Map介面不繼承Collection介面?

   儘管Map介面和它的實現也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map繼承Collection毫無意義,反之亦然。

如果Map繼承Collection介面,那麼元素去哪兒?Map包含key-value對,它提供抽取key或value列表集合的方法,但是它不適合“一組物件”規範。

   6.Iterator是什麼?

   Iterator介面提供遍歷任何Collection的介面。我們可以從一個Collection中使用迭代器方法來獲取迭代器例項。迭代器取代了Java集合框架中的Enumeration。迭代器允許呼叫者在迭代過程中移除元素。

   7.Enumeration和Iterator介面的區別?

   Enumeration的速度是Iterator的兩倍,也使用更少的記憶體。Enumeration是非常基礎的,也滿足了基礎的需要。但是,與Enumeration相比,Iterator更加安全,因為當一個集合正在被遍歷的時候,它會阻止其它執行緒去修改集合。

   迭代器取代了Java集合框架中的Enumeration。迭代器允許呼叫者從集合中移除元素,而Enumeration不能做到。為了使它的功能更加清晰,迭代器方法名已經經過改善。

   8.為何沒有像Iterator.add()這樣的方法,向集合中新增元素?

   語義不明,已知的是,Iterator的協議不能確保迭代的次序。然而要注意,ListIterator沒有提供一個add操作,它要確保迭代的順序。

   9.為何迭代器沒有一個方法可以直接獲取下一個元素,而不需要移動遊標?

   它可以在當前Iterator的頂層實現,但是它用得很少,如果將它加到介面中,每個繼承都要去實現它,這沒有意義。

   10.Iterater和ListIterator之間有什麼區別?

   1)我們可以使用Iterator來遍歷Set和List集合,而ListIterator只能遍歷List。

   2)Iterator只可以向前遍歷,而LIstIterator可以雙向遍歷。

   3)ListIterator從Iterator介面繼承,然後新增了一些額外的功能,比如新增一個元素、替換一個元素、獲取前面或後面元素的索引位置。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2698549/,如需轉載,請註明出處,否則將追究法律責任。

相關文章