2021年Java集合面試Top問題 - 第一部分

原文: https://dzone.com/articles/to...
做者: Sonia Mathias
翻譯: 祝坤榮

在Java中,集合是一種提供了存儲與操做批量對象的框架。在JDK1.2中「集合框架」就被定義了,並且它提供了全部的集合類和接口。Java集合類中最主要的兩個主要接口是Collection接口(java.util.Collection)和Map接口(java.util.Map)。Java集合框架提供的接口包括Set,List,Queue,Deque,提供類包括ArrayList,Vector,LinkedList,HashSet,PriorityQueue,TreeSet和LinkedHashSet。java

須要一個分離的集合框架

若是咱們不使用集合框架,標準的用於給Java對象分組的方法是Arrays,Vectors或者HashTable。他們都沒有通用的接口。他們的實現都是被單獨定義的且互相之間沒有任何聯繫。所以,要去記住全部不一樣的方法,語法,和建立函數都很困難。面試

好比,若是要給Vector加一個元素咱們會使用addElement()方法,而給Hashtable加一個元素則使用put()方法。編程

使用集合框架的好處

  1. 下降編程負擔:一個開發者能夠聚焦在集合的最佳使用方法上而不是聚焦在集合的設計上。這對實現抽象有好處。
  2. 提高編程速度:集合提供了一種數據結構的高性能實現,這能夠提高速度。
  3. 因爲Java已是一種普遍使用的語言了,大大小小的組織都在使用它。爲本身準備好基礎的和高級的Java面試題能夠對面試有好處。

讓咱們看看java面試中被問得最多的一些問題。設計模式

對初級開發者問的最多的問題

問題1:什麼是Java中的框架?
答:框架是提供了腳手架功能的一組類和對象的集合。理想的面向對象設計都應該有一個框架提供了對於集合類的同類型任務提供一樣的操做。數組

問題2:定義Java的集合框架。
答:Java的集合框架是一組接口和類的集合,提供了高效保存和處理數據的方法。Java集合框架提供的接口有Set,List,Queue,Deque,提供的類包括ArrayList,Vector,LinkedList,HashSet,PriorityQueue,TreeSet和LinkedHashSet。安全

問題3:Java集合框架中ArrayList與Vector的不一樣之處。
答:
ArrayList微信

  • 不是synchronized的
  • 它能夠以其數組大小的50%來擴展其大小
  • 它不是線程安全的
  • 它不是遺留類
    Vector:
  • 它是synchronized的
  • 它能夠增長本身雙倍的大小
  • 它是線程安全的
  • 它是遺留類
  • 問題4:Iterator與Enumeration的不一樣點。
    答:
    Iterator
  • 它能夠遍歷遺留類和非遺留類
  • 它比Enumeration慢
  • 它在遍歷集合時能夠執行remove操做
  • 它是fail-fast的

Enumeration數據結構

  • 它只能遍歷遺留元素
  • 它比Iterator快
  • 它只能在集合上執行traverse
  • 它不是fail-fast的

問題5:LinkedList與ArrayList的區別?
答:
ArrayList框架

  • 這個類實現了list接口
  • 這個類使用了動態數組來存儲元素
  • 插入與移除操做的最佳複雜度是O(1),而最差複雜度是O(n)。查詢操做(如存儲一個特定索引的元素)會須要O(1)的時間。
  • ArrayList在存儲和查詢數據時能幹的比較好。

LinkedList函數

  • 這個類實現了list接口和deque接口。
  • 這個類存儲元素使用了雙鏈列表。
  • 插入與移除操做提供了O(1)的性能。查詢操做(好比查詢一個特定索引的元素)須要O(n)的時間。
  • LinkedList在操做存儲好的數據時性能更好。
  • 問題6:解釋一下Queue接口的poll()與remove()方法的不一樣。
    答:兩個方法都返回並移除隊列頭的內容。它們只有在隊列爲空時行爲不同;remove()會拋一個異常而poll()會返回null。

問題7:Comparable與Comparator的不一樣。
答:
Comparable

  • 它提供了被排序元素使用的compareTo()方法
  • 它屬於java.lang包
  • 排序邏輯必需要與咱們想要排序的對象在同一個類中
  • 它提供單獨的排序序列。
  • 實際類被改過了

Comparator

  • 它提供排序元素用的compare()方法
  • 它在java.util包中
  • 排序邏輯必需要在不一樣的類中,以便根據不一樣對象的不一樣屬性來編寫排序方法
  • 它提供多種排序序列
  • 實際類沒有被改動

問題8:計算機內存中Stack的定義是?
答:stack是計算機內存中一個特殊區域,用來存儲函數建立的臨時變量。在stack中,變量是在運行時被聲明,存儲和初始化的。

問題9:列出map接口的集合視圖。
答:
集合視圖(Collection view)方法可讓Map在如下


三種方式視爲一個集合:

  • 鍵集合視圖:Map中保存的全部鍵的Set集合。
  • 值集合視圖:Map中保存的全部值的集合。這個集合不是一個Set,由於不一樣的主鍵key能夠被映射到同一個值value。
  • Entry集合視圖:Map中鍵值對的集合Set。Map接口提供了一個小的內嵌接口Map.Entry,元素都存儲在這個Set。

問題10:定義EnumSet。
答:它是可使用enum枚舉類型的Set實現。全部的元素都必須屬於一個特定的enum類型。它不是synchronized。NULL key是不容許的。

問題11:什麼方法能讓集合變成線程安全的?
答:這些方法是:

  • Collections.synchronizedList(list);
  • Collections.synchronizedMap(map);
  • Collections.synchronizedSet(set);
  • 問題12:Queue與Deque的不一樣點
    答:
    Queue
  • 衆所周知是單向隊列
  • 隊列中的元素在填加或刪除是都在同一端
  • Less versatile
    Deque
  • 是雙端隊列
  • 隊列中的元素能夠從隊尾填加或者從兩端填加和刪除。
  • More versatile

問題13:hashmap與hashtable的不一樣
答:
Hashmap

  • 不是synchronized,不是線程安全
  • 繼承了AbstractMap類
  • 容許一個null key和多個null value。
  • 能夠被iterator遍歷
    Hashtable
  • Synchronized的,線程安全
  • 繼承了Dictionary類
  • 不容許空key或者值
  • 能夠被enumerator和iterator遍歷

問題14:定義Iterator。
答:Iterator()是一個提供了遍歷集合方法的接口。它提供了一種普世的方式來遍歷集合中的元素,並實現了iterator設計模式。

問題15:什麼是navigable map?
答:NavigableMap接口,Java集合框架的成員,屬於java.util包。它是SortedMap的子接口,提供瞭如lowerKey,floorKey,ceilingKey和higherKey這樣方便的導航方法。它也提供了從現有map建立一個子map的方法。

問題16:什麼是queue接口的peek()?
答:Peek()返回了隊列的頭。它不移除任何元素。當隊列爲空時返回null。

未完待續


本文來自祝坤榮(時序)的微信公衆號「麥芽麪包」,公衆號id「darkjune_think」
開發者/科幻愛好者/硬核主機玩家/業餘翻譯
轉載請註明。

微博:祝坤榮
B站: https://space.bilibili.com/23...

交流Email: zhukunrong@yeah.net

相關文章
相關標籤/搜索