首頁 >Java >Java面試題 >java容器的常見面試題

java容器的常見面試題

(*-*)浩
(*-*)浩原創
2019-12-18 15:17:342283瀏覽

java容器的常見面試題

java 容器都有哪些?                                        中排下(建議學習中:) 常見面試題

java容器的常見面試題

Collection 和 Collection

##Collection 和 Collections 有什麼不同?

java.util.Collection 是一個集合介面(集合類別的一個頂層介面)。它提供了對集合物件進行基本操作的通用介面方法。 Collection介面在Java 類別庫中有很多具體的實作。 Collection介面的意義是為各種特定的集合提供了最大化的統一操作方式,其直接繼承介面有List與Set。

Collections則是集合類的一個工具類/幫助類,其中提供了一系列靜態方法,用於對集合中元素進行排序、搜尋以及線程安全等各種操作java容器的常見面試題#List、Set、Map 之間的差異是什麼?


HashMap 和 Hashtable 有什麼不同?

hashMap去掉了HashTable 的contains方法,但加上了containsValue()和containsKey()方法。 hashTable同步的,而HashMap是非同步的,效率上比hashTable高。

hashMap允許空鍵值,而hashTable不允許。

如何決定使用 HashMap 還是 TreeMap?

對於在Map中插入、刪除和定位元素這類操作,HashMap是最好的選擇。然而,如果你需要對一個有序的key集合進行遍歷,TreeMap是更好的選擇。基於你的collection的大小,也許在HashMap中加入元素會更快,將map換成TreeMap進行有序key的遍歷。

說一下 HashMap 的實作原理?

HashMap概述: HashMap是基於哈希表的Map介面的非同步實作。此實作提供所有可選的映射操作,並允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恆久不變。

HashMap的資料結構: 在java程式語言中,最基本的結構就是兩種,一個是數組,另外一個是模擬指標(引用),所有的資料結構都可以用這兩個基本結構來建構的,HashMap也不例外。 HashMap實際上是一個「鍊錶散列」的資料結構,即數組和鍊錶的結合體。 當我們往Hashmap中put元素時,首先根據key的hashcode重新計算hash值,根據hash值得到這個元素在數組中的位置(下標),如果該數組在該位置上已經存放了其他元素,那麼在這個位置上的元素將以鍊錶的形式存放,新加入的放在鏈頭,最先加入的放入鏈尾.如果數組中該位置沒有元素,就直接將該元素放到數組的該位置上。

需要注意Jdk 1.8中對HashMap的實現做了優化,當鍊錶中的節點資料超過八個之後,該鍊錶會轉為紅黑樹來提高查詢效率,從原來的O(n)到O(logn)

說一下HashSet 的實作原理?

HashSet底層由HashMap實作HashSet的值存放在HashMap的key上

HashMap的value統一為PRESENT

# ArrayList 和LinkedList 的差別是什麼?

最明顯的區別是 ArrrayList底層的資料結構是數組,支援隨機訪問,而 LinkedList 的底層資料結構是雙向循環鍊錶,不支援隨機存取。使用下標存取一個元素,ArrayList 的時間複雜度是 O(1),而 LinkedList 是 O(n)。

如何實作陣列和 List 之間的轉換?

List轉換成為陣列:呼叫ArrayList的toArray方法。

陣列轉換成為List:呼叫Arrays的asList方法。

ArrayList 和 Vector 的差別是什麼?

Vector是同步的,而ArrayList不是。然而,如果你尋求在迭代的時候對列表進行改變,你應該使用CopyOnWriteArrayList。 ArrayList比Vector快,它因為有同步,不會過載。 

ArrayList比較通用,因為我們可以使用Collections工具類別輕易地取得同步清單和唯讀清單。

Array 和 ArrayList 有何不同?

Array可以容納基本型別和對象,而ArrayList只能容納對象。 Array是指定大小後不可變的,而ArrayList大小是可變的。 

Array沒有提供ArrayList那麼多功能,例如addAll、removeAll和iterator等。

######在 Queue 中 poll()和 remove()有什麼不同? #########poll() 和remove() 都是從佇列中取出一個元素,但是poll() 在取得元素失敗的時候會回傳空,但remove() 失敗的時候會拋出例外。 ###

哪些集合類別是線程安全的?

vector:就比arraylist多了個同步化機制(執行緒安全性),因為效率較低,現在已經不太建議使用。在web應用中,特別是前台頁面,往往效率(頁面響應速度)是優先考慮的。

statck:堆疊類,先進後出。

hashtable:就比hashmap多了個執行緒安全。

enumeration:枚舉,相當於迭代器。

迭代器 Iterator 是什麼?

迭代器是一種設計模式,它是一個對象,它可以遍歷並選擇序列中的對象,而開發人員不需要了解該序列的底層結構。迭代器通常被稱為“輕量級”對象,因為創建它的代價很小。

Iterator 怎麼使用?有什麼特點?

Java中的Iterator功能比較簡單,而且只能單向移動:

(1) 使用方法iterator()要求容器傳回一個Iterator。第一次呼叫Iterator的next()方法時,它會傳回序列的第一個元素。注意:iterator()方法是java.lang.Iterable介面,被Collection繼承。

(2) 使用next()來獲得序列中的下一個元素。

(3) 使用hasNext()檢查序列中是否還有元素。

(4) 使用remove()將迭代器新回傳的元素刪除。 

Iterator是Java迭代器最簡單的實現,為List設計的ListIterator有更多的功能,它可以從兩個方向遍歷List,也可以從List插入和刪除元素。

Iterator 和 ListIterator 有什麼不同?

Iterator可用來遍歷Set和List集合,但ListIterator只能用來遍歷List。 

Iterator對集合只能是前向遍歷,ListIterator既可以前向也可以後向。 

ListIterator實作了Iterator接口,並包含其他的功能,例如:增加元素,替換元素,取得前一個和後一個元素的索引,等等。

以上是java容器的常見面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn