一、Collection 與Collections 的差異
(更多相關面試題推薦:java面試題)
java.util.Collection 是一個集合框架的父介面。它提供了對集合物件進行基本操作的通用介面方法。 Collection介面在Java 類別庫中有很多具體的實作。 Collection介面的意義是為各種具體的集合提供了最大化的統一操作方式。
java.util.Collections 是一個包裝類別。它包含有各種有關集合運算的靜態多型方法。此類別不能實例化,就像一個工具類,服務於Java的Collection框架。他提供一系列靜態方法實現對各種集合的搜尋、排序、線程安全化等操作。
二、Set 裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢?是用==還是equals()?它們有何差別?
==:
基本類型:比較的是值是否相同
#引用類型:比較的是位址值是否相同
equals ():
引用類型:預設情況下,比較的是位址值,可進行重寫,比較的是物件的成員變數值是否相同。
如果一個類別沒有自己定義equals 方法,它預設的equals 方法(從Object 類別繼承的)就是使用==運算符,也是在比較兩個變數指向的物件是否是相同對象,這時候使用equals 和使用==會得到相同的結果,如果比較的是兩個獨立的物件則總回傳false。
如果你寫的類別希望能夠比較該類別創建的兩個實例物件的內容是否相同,那麼你必須覆寫equals方法,由你自己寫程式碼來決定在什麼情況即可認為兩個對象的內容是相同的。
(相關教學推薦:java入門教學)
三、Iterator的作用是什麼
用於遍歷集合中的元素,比for 和for each的好處:
不會因為節點的刪除報異常,自己寫的資料結構也可以實現它。
四、HashSet和TreeSet有什麼差別,什麼時候用它們?
基本的:
1、TreeSet 是二元樹實現的,Treeset中的資料是自動排好序的,不允許放入null值。
2、HashSet 是哈希表實現的,HashSet中的資料是無序的,可以放入null,但只能放入一個null,兩者中的值都不能重複,就如資料庫中唯一約束。
3、HashSet要求放入的對象必須實作HashCode()方法,放入的對象,是以hashcode碼作為標識的,而具有相同內容的String對象,hashcode是一樣,所以放入的內容不能重複。但是同一個類別的物件可以放入不同的實例 。
(影片教學建議:java影片教學)
時間複雜度:
HashSet是由一個hash表來實現的, 因此,它的元素是無序的。 add(),remove(),contains()方法的時間複雜度是O(1)。
TreeSet是由一個樹狀圖的結構來實現的,它裡面的元素是有順序的。因此,add(),remove(),contains()方法的時間複雜度是O(logn)。
利用TreeSet保存自訂類別物件的時候,自訂所在的類別一定要實作Comparable接口,如果沒有實作這個介面那麼就無法區分大小關係,而且在TreeSet中如果要進行排序,那麼就要將所有的字段都進行比較,就是說在TreeSet中是依靠comparato()方法返回的是不是0來判斷是不是重複元素的。
TreeSet 依賴的是Comparable 來區分重複資料;
HashSet 依賴的是hashCode()、equals()來區分重複資料。
以上是java經典面試題集錦(八)的詳細內容。更多資訊請關注PHP中文網其他相關文章!