這部分也包含數據結構、算法及數組的面試問題java
List、Set、Map 和 Queue 之間的區別(答案)
List 是一個有序集合,容許元素重複。它的某些實現能夠提供基於下標值的常量訪問時間,可是這不是 List 接口保證的。Set 是一個無序集合。面試
poll() 方法和 remove() 方法的區別?
poll() 和 remove() 都是從隊列中取出一個元素,可是 poll() 在獲取元素失敗的時候會返回空,可是 remove() 失敗的時候會拋出異常。算法
Java 中 LinkedHashMap 和 PriorityQueue 的區別是什麼?(答案)
PriorityQueue 保證最高或者最低優先級的的元素老是在隊列頭部,可是 LinkedHashMap 維持的順序是元素插入的順序。當遍歷一個 PriorityQueue 時,沒有任何順序保證,可是 LinkedHashMap 課保證遍歷順序是元素插入的順序。數組
ArrayList 與 LinkedList 的不區別?(答案)
最明顯的區別是 ArrrayList 底層的數據結構是數組,支持隨機訪問,而 LinkedList 的底層數據結構書鏈表,不支持隨機訪問。使用下標訪問一個元素,ArrayList 的時間複雜度是 O(1),而 LinkedList 是 O(n)。更多細節的討論參見答案。數據結構
用哪兩種方式來實現集合的排序?(答案)
你能夠使用有序集合,如 TreeSet 或 TreeMap,你也能夠使用有順序的的集合,如 list,而後經過 Collections.sort() 來排序。編輯器
Java 中怎麼打印數組?(answer答案)
你能夠使用 Arrays.toString() 和 Arrays.deepToString() 方法來打印數組。因爲數組沒有實現 toString() 方法,因此若是將數組傳遞給 System.out.println() 方法,將沒法打印出數組的內容,可是 Arrays.toString() 能夠打印每一個元素。spa
Java 中的 LinkedList 是單向鏈表仍是雙向鏈表?(答案)
是雙向鏈表,你能夠檢查 JDK 的源碼。在 Eclipse,你能夠使用快捷鍵 Ctrl + T,直接在編輯器中打開該類。code
Java 中的 TreeMap 是採用什麼樹實現的?(答案)
Java 中的 TreeMap 是使用紅黑樹實現的。對象
Hashtable 與 HashMap 有什麼不一樣之處?(答案)
這兩個類有許多不一樣的地方,下面列出了一部分: a) Hashtable 是 JDK 1 遺留下來的類,而 HashMap 是後來增長的。 b)Hashtable 是同步的,比較慢,但 HashMap 沒有同步策略,因此會更快。 c)Hashtable 不容許有個空的 key,可是 HashMap 容許出現一個 null key。 更多的不一樣之處參見答案。blog
Java 中的 HashSet,內部是如何工做的?(answer答案)
HashSet 的內部採用 HashMap來實現。因爲 Map 須要 key 和 value,因此全部 key 的都有一個默認 value。相似於 HashMap,HashSet 不容許重複的 key,只容許有一個null key,意思就是 HashSet 中只容許存儲一個 null 對象。
寫一段代碼在遍歷 ArrayList 時移除一個元素?(答案)
該問題的關鍵在於面試者使用的是 ArrayList 的 remove() 仍是 Iterator 的 remove()方法。這有一段示例代碼,是使用正確的方式來實如今遍歷的過程當中移除元素,而不會出現 ConcurrentModificationException 異常的示例代碼。
咱們能本身寫一個容器類,而後使用 for-each 循環嗎?
能夠,你能夠寫一個本身的容器類。若是你想使用 Java 中加強的循環來遍歷,你只須要實現 Iterable 接口。若是你實現 Collection 接口,默認就具備該屬性。
ArrayList 和 HashMap 的默認大小是多數?(答案)
在 Java 7 中,ArrayList 的默認大小是 10 個元素,HashMap 的默認大小是16個元素(必須是2的冪)。這就是 Java 7 中 ArrayList 和 HashMap 類的代碼片斷:
// from ArrayList.java JDK 1.7 private static final int DEFAULT_CAPACITY = 10; //from HashMap.java JDK 7 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
有沒有可能兩個不相等的對象有有相同的 hashcode?
有可能,兩個不相等的對象可能會有相同的 hashcode 值,這就是爲何在 hashmap 中會有衝突。相等 hashcode 值的規定只是說若是兩個對象相等,必須有相同的hashcode 值,可是沒有關於不相等對象的任何規定。
兩個相同的對象會有不一樣的的 hash code 嗎?
不能,根據 hash code 的規定,這是不可能的。
咱們能夠在 hashcode() 中使用隨機數字嗎?(答案)
不行,由於對象的 hashcode 值必須是相同的。參見答案獲取更多關於 Java 中重寫 hashCode() 方法的知識。
Java 中,Comparator 與 Comparable 有什麼不一樣?(答案)
Comparable 接口用於定義對象的天然順序,而 comparator 一般用於定義用戶定製的順序。Comparable 老是隻有一個,可是能夠有多個 comparator 來定義對象的順序。
爲何在重寫 equals 方法的時候須要重寫 hashCode 方法?(答案)
由於有強制的規範指定須要同時重寫 hashcode 與 equal 是方法,許多容器類,如 HashMap、HashSet 都依賴於 hashcode 與 equals 的規定。