程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 關於Java聚集框架面試題(含謎底)下

關於Java聚集框架面試題(含謎底)下

編輯:關於JAVA

關於Java聚集框架面試題(含謎底)下。本站提示廣大學習愛好者:(關於Java聚集框架面試題(含謎底)下)文章只能為提供參考,不一定能成為您想要的結果。以下是關於Java聚集框架面試題(含謎底)下正文


21.HashMap和HashTable有何分歧?

(1)HashMap許可key和value為null,而HashTable不許可。

(2)HashTable是同步的,而HashMap不是。所以HashMap合適單線程情況,HashTable合適多線程情況。

(3)在Java1.4中引入了LinkedHashMap,HashMap的一個子類,假設你想要遍歷次序,你很輕易從HashMap轉向LinkedHashMap,然則HashTable不是如許的,它的次序是弗成預知的。

(4)HashMap供給對key的Set停止遍歷,是以它是fail-fast的,但HashTable供給對key的Enumeration停止遍歷,它不支撐fail-fast。

(5)HashTable被以為是個遺留的類,假如你追求在迭代的時刻修正Map,你應當應用CocurrentHashMap。

22.若何決議選用HashMap照樣TreeMap?

關於在Map中拔出、刪除和定位元素這類操作,HashMap是最好的選擇。但是,假設你須要對一個有序的key聚集停止遍歷,TreeMap是更好的選擇。基於你的collection的年夜小,或許向HashMap中添加元素會更快,將map換為TreeMap停止有序key的遍歷。

23.ArrayList和Vector有何異同點?

ArrayList和Vector在許多時刻都很相似。

(1)二者都是基於索引的,外部由一個數組支撐。

(2)二者保護拔出的次序,我們可以依據拔出次序來獲得元素。

(3)ArrayList和Vector的迭代器完成都是fail-fast的。

(4)ArrayList和Vector二者許可null值,也能夠應用索引值對元素停止隨機拜訪。

以下是ArrayList和Vector的分歧點。

(1)Vector是同步的,而ArrayList不是。但是,假如你追求在迭代的時刻對列表停止轉變,你應當應用CopyOnWriteArrayList。

(2)ArrayList比Vector快,它由於有同步,不會過載。

(3)ArrayList加倍通用,由於我們可使用Collections對象類隨意馬虎地獲得同步列表和只讀列表。

24.Array和ArrayList有何差別?甚麼時刻更合適用Array?

Array可以包容根本類型和對象,而ArrayList只能包容對象。

Array是指定年夜小的,而ArrayList年夜小是固定的。

Array沒有供給ArrayList那末多功效,好比addAll、removeAll和iterator等。雖然ArrayList顯著是更好的選擇,但也有些時刻Array比擬好用。

(1)假如列表的年夜小曾經指定,年夜部門情形下是存儲和遍歷它們。

(2)關於遍歷根本數據類型,雖然Collections應用主動裝箱來加重編碼義務,在指定年夜小的根本類型的列表上任務也會變得很慢。

(3)假如你要應用多維數組,應用[][]比List<List<>>更輕易。

25.ArrayList和LinkedList有何差別?

ArrayList和LinkedList二者都完成了List接口,然則它們之間有些分歧。

(1)ArrayList是由Array所支撐的基於一個索引的數據構造,所以它供給對元素的隨機拜訪,龐雜度為O(1),但LinkedList存儲一系列的節點數據,每一個節點都與前一個和下一個節點相銜接。所以,雖然有應用索引獲得元素的辦法,外部完成是從肇端點開端遍歷,遍歷到索引的節點然後前往元素,時光龐雜度為O(n),比ArrayList要慢。

(2)與ArrayList比擬,在LinkedList中拔出、添加和刪除一個元素會更快,由於在一個元素被拔出到中央的時刻,不會觸及轉變數組的年夜小,或更新索引。

(3)LinkedList比ArrayList消費更多的內存,由於LinkedList中的每一個節點存儲了前後節點的援用。

26.哪些聚集類供給對元素的隨機拜訪?

ArrayList、HashMap、TreeMap和HashTable類供給對元素的隨機拜訪。

27.EnumSet是甚麼?

java.util.EnumSet是應用列舉類型的聚集完成。當聚集創立時,列舉聚集中的一切元素必需來自單個指定的列舉類型,可所以顯示的或隱示的。EnumSet是分歧步的,不許可值為null的元素。它也供給了一些有效的辦法,好比copyOf(Collection c)、of(E first,E…rest)和complementOf(EnumSet s)。

28.哪些聚集類是線程平安的?

Vector、HashTable、Properties和Stack是同步類,所以它們是線程平安的,可以在多線程情況下應用。Java1.5並發API包含一些聚集類,許可迭代時修正,由於它們都任務在聚集的克隆上,所以它們在多線程情況中是平安的。

29.並發聚集類是甚麼?

Java1.5並發包(java.util.concurrent)包括線程平安聚集類,許可在迭代時修正聚集。迭代器被設計為fail-fast的,會拋出ConcurrentModificationException。一部門類為:CopyOnWriteArrayList、 ConcurrentHashMap、CopyOnWriteArraySet。

30.BlockingQueue是甚麼?

Java.util.concurrent.BlockingQueue是一個隊列,在停止檢索或移除一個元素的時刻,它會期待隊列變成非空;當在添加一個元素時,它會期待隊列中的可用空間。BlockingQueue接口是Java聚集框架的一部門,重要用於完成臨盆者-花費者形式。我們不須要擔憂期待臨盆者有可用的空間,或花費者有可用的對象,由於它都在BlockingQueue的完成類中被處置了。Java供給了集中BlockingQueue的完成,好比ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue,、SynchronousQueue等。

31.隊列和棧是甚麼,列出它們的差別?

棧和隊列二者都被用來預存儲數據。java.util.Queue是一個接口,它的完成類在Java並發包中。隊列許可先輩先出(FIFO)檢索元素,但並不是老是如許。Deque接口許可從兩頭檢索元素。

棧與隊列很類似,但它許可對元素停止落後先出(LIFO)停止檢索。

Stack是一個擴大自Vector的類,而Queue是一個接口。

32.Collections類是甚麼?

Java.util.Collections是一個對象類僅包括靜態辦法,它們操作或前往聚集。它包括操作聚集的多態算法,前往一個由指定聚集支撐的新聚集和其它一些內容。這個類包括聚集框架算法的辦法,好比折半搜刮、排序、混編和逆序等。

33.Comparable和Comparator接口是甚麼?

假如我們想應用Array或Collection的排序辦法時,須要在自界說類裡完成Java供給Comparable接口。Comparable接口有compareTo(T OBJ)辦法,它被排序辦法所應用。我們應當重寫這個辦法,假如“this”對象比傳遞的對象參數更小、相等或更年夜時,它前往一個負整數、0或正整數。然則,在年夜多半現實情形下,我們想依據分歧參數停止排序。好比,作為一個CEO,我想對雇員基於薪資停止排序,一個HR想基於年紀對他們停止排序。這就是我們須要應用Comparator接口的情形,由於Comparable.compareTo(Object o)辦法完成只能基於一個字段停止排序,我們不克不及依據對象排序的須要選擇字段。Comparator接口的compare(Object o1, Object o2)辦法的完成須要傳遞兩個對象參數,若第一個參數比第二個小,前往負整數;若第一個等於第二個,前往0;若第一個比第二個年夜,前往正整數。

34.Comparable和Comparator接口有何差別?

Comparable和Comparator接口被用來對對象聚集或許數組停止排序。Comparable接口被用來供給對象的天然排序,我們可使用它來供給基於單個邏輯的排序。

Comparator接口被用來供給分歧的排序算法,我們可以選擇須要應用的Comparator來對給定的對象聚集停止排序。

35.我們若何對一組對象停止排序?

假如我們須要對一個對象數組停止排序,我們可使用Arrays.sort()辦法。假如我們須要排序一個對象列表,我們可使用Collection.sort()辦法。兩個類都有效於天然排序(應用Comparable)或基於尺度的排序(應用Comparator)的重載辦法sort()。Collections外部應用數組排序辦法,一切它們二者都有雷同的機能,只是Collections須要花時光將列表轉換為數組。

36.當一個聚集被作為參數傳遞給一個函數時,若何才可以確保函數不克不及修正它?

在作為參數傳遞之前,我們可使用Collections.unmodifiableCollection(Collection c)方法創立一個只讀聚集,這將確保轉變聚集的任何操作都邑拋出UnsupportedOperationException。

37.我們若何從給定聚集那邊創立一個synchronized的聚集?

我們可使用Collections.synchronizedCollection(Collection c)依據指定聚集來獲得一個synchronized(線程平安的)聚集。

38.聚集框架裡完成的通用算法有哪些?

Java聚集框架供給經常使用的算法完成,好比排序和搜刮。Collections類包括這些辦法完成。年夜部門算法是操作List的,但一部門對一切類型的聚集都是可用的。部門算法有排序、搜刮、混編、最年夜最小值。

39.年夜寫的O是甚麼?舉幾個例子?

年夜寫的O描寫的是,就數據構造中的一系列元素而言,一個算法的機能。Collection類就是現實的數據構造,我們平日基於時光、內存和機能,應用年夜寫的O來選擇聚集完成。好比:例子1:ArrayList的get(index i)是一個常量時光操作,它不依附list中元素的數目。所以它的機能是O(1)。例子2:一個關於數組或列表的線性搜刮的機能是O(n),由於我們須要遍歷一切的元從來查找須要的元素。

40.與Java聚集框架相干的有哪些最好的理論?

(1)依據須要選擇准確的聚集類型。好比,假如指定了年夜小,我們會選用Array而非ArrayList。假如我們想依據拔出次序遍歷一個Map,我們須要應用TreeMap。假如我們不想反復,我們應當應用Set。

(2)一些聚集類許可指定初始容量,所以假如我們可以或許估量到存儲元素的數目,我們可使用它,就防止了從新哈希或年夜小調劑。

(3)基於接口編程,而非基於完成編程,它許可我們後來隨意馬虎地轉變完成。

(4)老是應用類型平安的泛型,防止在運轉時湧現ClassCastException。

(5)應用JDK供給的弗成變類作為Map的key,可以免本身完成hashCode()和equals()。

(6)盡量應用Collections對象類,或許獲得只讀、同步或空的聚集,而非編寫本身的完成。它將會供給代碼重用性,它有著更好的穩固性和可保護性。

以上內容全體都是針對java聚集停止的發問,以為不錯的同伙武斷珍藏吧,年夜家也能夠聯合上一篇停止進修:關於Java聚集框架面試題(含謎底)上

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved