1. 程式人生 > >面試題整理(2)

面試題整理(2)

異常處理 特性 重新 有意 contain catch 類型 長度 all

1.什麽是叠代器?

Iterator接口提供了很多對集合進行叠代的方法。每一個集合類都包含了可以返回叠代器實例的叠代方法。

叠代器可以在叠代過程中刪除底層集合的元素,但是不可以直接調用集合的remove(Object obj)刪除,可以通過叠代器的remove()方法刪除。

2.ArrayList和LinkedList有什麽區別?

ArrayList是基於索引的數據接口,它的底層是數組。它可以以O(1)時間復雜度對元素進行隨機訪問。與此對應,LinkedList是以元素列表的形式存儲它的數據,每一個元素都和它的前一個和後一個元素鏈接在一起,在這種情況下,查找某個元素的時間復雜度是O(n)。

相對於ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數組那樣重新計算大小或者是更新索引。

LinkedList比ArrayList更占內存,因為LinkedList為每一個節點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。

3.HashSet和TreeSet有什麽區別?

HashSet是由一個hash表來實現的,因此,它的元素的無序的。add(),remove(),contain()方法的時間復雜度是O(1)。

TreeSet是由一個樹形的結構來實現的,它裏面的元素是有序的。add(),remove(),contains()方法的時間復雜度是O(logn)。

4.數組(Array)和列表(ArrayList)有什麽區別?什麽時候應該使用Array而不是ArrayList?

Array可以包含基本類型和對象類型,ArrayList只能包含對象類型;

Array的大小是固定的,ArrayList的大小是動態變化的;

ArrayList提供了更多的方法和特性,如:addAll(),removeAll(),iterator()等;

對於基本數據類型,集合使用自動裝箱來減少編碼工作量。但是,當處理固定大小的基本數據類型的時候,這種方式相對比較慢。

5.Java中的兩種異常類型是什麽?他們有什麽區別?

Java中有兩種異常:受檢查的(checked)異常和不受檢查的(unchecked)異常。不受檢查的異常不需要在方法或者是構造函數上聲明,就算方法或者是構造函數的執行可能會拋出這樣的異常,並且不受檢查的異常可以傳播到方法或者是構造函數的外面。相反,受檢查的異常必須要用throws語句在方法或者是構造函數上聲明。

6.Java中Exception和Error有什麽區別?

Exception和Error都是Throwable的子類。Exception用於用戶程序可以捕獲的異常情況。Error定義了不期望被用戶程序捕獲的異常。

7.throw和throws有什麽區別?

throws是用來聲明一個方法可能拋出的所有異常信息,throws是將異常聲明但是不處理,而是將異常往上傳,誰調用我就交給誰處理。而throw則是指拋出的一個具體的異常類型。

throw:就是自己進行異常處理,處理的時候有兩種方式,要麽自己捕獲異常(也就是try catch進行捕捉),要麽聲明拋出一個異常。throw一旦進入被執行,程序立即會轉入異常處理階段,後面的語句就不再執行,而且所在的方法不再返回有意義的值.

8.請說出ArrayList,Vector, LinkedList的存儲性能和特性

ArrayList 和 Vector 都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector 由於使用了 synchronized 方法(線程安全),通常性能上較 ArrayList 差,而LinkedList 使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。

9.Set和List的區別

List:列表。
特點:

1,有序(存儲元素的順序和取出元素的順序一致)

2,該集合中的元素都有索引,所以可以通過索引(角標)來訪問元素。
3,它可以存儲重復元素。

常見子類對象:記住:具體的子類對象,我們要學習應該是該對象的特有的數據結構,以及相關的特點。
|--Vector:jdk1.0就存在了。底層是數組結構的。可變長度數組,
原理:一旦原數組長度不夠,會創建新數組,將原數組的元素復制到新數組中,並將新元素添加到新數組中。
Vector是同步的。
|--ArrayList:底層是數組結構,也是支持長度可變數組的。是不同步的。替代了Vector.因為效率高。 查詢效率很高。 但是增刪的效率很低。
|--LinkedList:底層是鏈接列表結構,簡稱鏈表結構。是不同步的。這個中結構的好處:對元素的增刪非常效率很高。 查詢的效率很低。
Set:集:中的方法和Collection一致,只要重點註意它的子類對象即可。取出元素只能使用叠代器。
特點:
1,不包含重復元素。(最大的特點)
2,這個集合存入元素的順序和取出元素的順序不一定一致。(具體的容器對象數據結構不同,順序也有不同)
|--HashSet:底層數據結構是哈希表,不保證順序,是不同步的。
哈希表:提供數組的查詢效率而出現的。
將要存儲的元素先通過哈希算法算出一個哈希值來標識存儲的位置,代表著元素。要找元素時,先將該元素通過哈希算法算出哈希值,在通過哈希值到哈希表中去查找。
特點:
1,不關系元素的順序。
2,提高了查詢效率。
3,不可能出現重復元素,因為哈希值都不同。即使相同,會再次判斷兩個元素的equals,內容是否相同。
如果內容也相同,不存,如果內容不同,存儲。所以哈希表要保證元素的唯一性,必須要依賴於兩個方法。
1,hashCode 2,equals
|--TreeSet:可以給Set集合中的元素進行指定順序的排序。非同步的。
默認情況下,是通過元素的自然順序排的序。
它保證元素唯一性的依據是看比較方法的返回結果是否是0.是0.就視為元素相同。不存。
TreeSet排序的方式一:讓元素自身具備比較性,需要實現Comparable接口,覆蓋compareTo方法。這種比較方式成為自然順序排序。如果元素自身不具備比較性或者具備的比較性(自然順序)不是所需要的。
這時只能用第二種方式 。
TreeSet排序的方式二:讓容器自身具備比較性。容器一初始化就具備了比較功能。因為容器時在對象構造時完成的。通過查閱,有一個構造方法TreeSet(Comparator).在容器初始化時可以指定一個比較器。 需要實現Comparator接口,覆蓋compare方法即可。所以這種方式成為比較器排序。 當存入的的對象有重復時,用List,沒有重復元素時,用Set

面試題整理(2)