<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java 面試的 40 個熱門問答集 > 原文: [https://howtodoinjava.com/interview-questions/useful-java-collection-interview-questions/](https://howtodoinjava.com/interview-questions/useful-java-collection-interview-questions/) 毫無疑問,java 集合是最重要的領域之一,無論您是初級還是高級,您都可以在任何位置對其進行測試。 范圍如此之廣,幾乎不可能涵蓋所有問題。 但是,根據我以前的面試,我嘗試提出您必須知道的盡可能多的良好的 **java 集合面試問題**。 我的目標是初學者和高級問題,所以如果您發現一些基本問題,請多多包涵,因為它們對某些初級開發人員可能有用。 ```java Java collection interview questions General questions 1) What is the Java Collections API? List down its advantages? 2) Explain Collections hierarchy? 3) Why Collection interface does not extend Cloneable and Serializable interface? 4) Why Map interface does not extend Collection interface? List interface related 5) Why we use List interface? What are main classes implementing List interface? 6) How to convert an array of String to ArrayList? 7) How to reverse the list? Set interface related 8) Why we use Set interface? What are main classes implementing Set interface? 9) How HashSet store elements? 10) Can a null element added to a TreeSet or HashSet? Map interface related 11) Why we use Map interface? What are main classes implementing Map interface? 12) What are IdentityHashMap and WeakHashMap? 13) Explain ConcurrentHashMap? How it works? 14) How hashmap works? 15) How to design a good key for hashmap? 16) What are different Collection views provided by Map interface? 17) When to use HashMap or TreeMap? Tell the difference questions 18) Difference between Set and List? 19) Difference between List and Map? 20) Difference between HashMap and HashTable? 21) Difference between Vector and ArrayList? 22) Difference between Iterator and Enumeration? 23) Difference between HashMap and HashSet? 24) Difference between Iterator and ListIterator? 25) Difference between TreeSet and SortedSet? 26) Difference between ArrayList and LinkedList? More questions 27) How to make a collection read only? 28) How to make a collection thread safe? 29) Why there is not method like Iterator.add() to add elements to the collection? 30) What are different ways to iterate over a list? 31) What do you understand by iterator fail-fast property? 32) What is difference between fail-fast and fail-safe? 33) How to avoid ConcurrentModificationException while iterating a collection? 34) What is UnsupportedOperationException? 35) Which collection classes provide random access of it’s elements? 36) What is BlockingQueue? 37) What is Queue and Stack, list their differences? 38) What is Comparable and Comparator interface? 39) What are Collections and Arrays class? 40) Recommended resources ``` 不要浪費時間,讓我們深入研究 Java 集合的概念。 ## Java 集合面試一般問題 #### 1)什么是 Java 集合框架? 列出其優勢? 根據定義,集合是**代表一組對象**的對象。 像集合論一樣,集合是一組元素。 很簡單! 在 JDK 1.2 之前,JDK 具有一些工具類,例如`Vector`和`HashTable`,但是沒有集合框架的概念。 從 JDK 1.2 以后,JDK 感到需要對可重用數據結構提供一致的支持。 最后,集合框架主要由 Joshua Bloch 設計和開發,并在 JDK 1.2 中引入了。 Java 集合的最明顯的**優點可以列出為:** * 隨時可用的代碼,減少了編程工作 * 由于數據結構和算法的高性能實現而提高了性能 * 通過建立公共語言來回傳遞集合,從而在不相關的 API 之間提供互操作性 * 通過僅學習一些頂級接口和受支持的操作,易于學習的 API #### 2)解釋集合的層次結構? ![Java Collection Hierarchy](https://img.kancloud.cn/cb/cd/cbcd586a3905f14ee6e02536c8ee286d_719x320.png "Java Collection Hierarchy") Java 集合層次結構 如上圖所示,集合框架頂部有一個接口,即**收集**。 通過設置,列表和隊列接口對其進行了擴展。 然后在這 3 個分支中還有其他類別的負載,我們將在以下問題中學習。 記住`Collection`接口的簽名。 它會在很多問題上幫助您。 ```java public interface Collection extends Iterable { //method definitions } ``` 框架還包含`Map`接口,它是集合框架的一部分。 但它不會擴展`Collection`接口。 我們將在此問題庫中的第四個問題中看到原因。 #### 3)為什么`Collection`接口沒有擴展`Cloneable`和`Serializable`接口? 好吧,最簡單的答案是“**不需要這樣做**”。 擴展接口僅表示您正在創建接口的子類型,換句話說,不希望使用更專門的行為和`Collection`接口來實現`Cloneable`和`Serializable`接口。 另一個原因是并非每個人都有理由擁有`Cloneable`集合,因為如果它具有非常大的數據,那么每個**不必要的克隆操作都將消耗大量內存**。 初學者可能在不知道后果的情況下使用它。 另一個原因是`Cloneable`和`Serializable`是非常專門的行為,因此僅在需要時才應實現。 例如,集合中的許多具體類都實現了這些接口。 因此,如果您想要此特性。 使用這些集合類,否則使用其替代類。 #### 4)為什么`Map`接口沒有擴展`Collection`接口? 這個面試問題的一個很好的答案是“**因為它們不兼容**”。 集合具有方法`add(Object o)`。 `Map`無法使用這種方法,因為它需要鍵值對。 還有其他原因,例如`Map`支持`keySet`,`valueSet`等。`Collection`類沒有此類視圖。 由于存在如此大的差異,因此在`Map`接口中未使用`Collection`接口,而是在單獨的層次結構中構建。 ## Java 集合面試 – 列出接口問題 #### 5)為什么要使用`List`接口? 什么是實現`List`接口的主要類? Java 列表是元素的“有序”集合。 該排序是基于**零的索引**。 它不關心重復項。 除了在`Collection`接口中定義的方法外,它**確實有自己的方法**,它們在很大程度上也要根據元素**的索引位置來操作集合**。 這些方法可以分為搜索,獲取,迭代和范圍視圖。 以上所有操作均支持索引位置。 實現`List`接口的主要類為:`Stack`,`Vector`,`ArrayList`和`LinkedList`。 在 Java 文檔中閱讀有關它們的更多信息。 #### 6)如何將`String`數組轉換為`arraylist`? 這更多是一個程序性問題,在初學者水平上可以看到。 目的是檢查收集工具類中申請人的知識。 現在,讓我們了解集合框架中有兩個工具類,它們大多數在面試中看到,即`Collections`和`Arrays`。 集合類提供了一些靜態函數來對集合類型執行特定操作。 數組提供了要在數組類型上執行的工具函數。 ```java //String array String[] words = {"ace", "boom", "crew", "dog", "eon"}; //Use Arrays utility class List wordList = Arrays.asList(words); //Now you can iterate over the list ``` 請注意,此函數并非特定于`String`類,它將返回數組屬于任何類型的元素的`List`。 例如 ```java //String array Integer[] nums = {1,2,3,4}; //Use Arrays utility class List numsList = Arrays.asList(nums); ``` #### 7)如何反轉列表? 這個問題就像上面的測試您對`Collections`工具類的了解。 使用它`reverse()`方法可以反轉列表。 ```java Collections.reverse(list); ``` ## Java 集合面試 – 設置接口問題 #### 8)為什么要使用`Set`接口? 什么是實現``Set``接口的主要類? 它**對集合論**中的數學集合進行建模。 `Set`接口類似于``List``接口,但有一些區別。 首先,它是**未排序的集合**。 因此,添加或刪除元素時不會保留任何順序。 它提供的主要特性是“**元素**的唯一性”。 它不支持重復元素。 `Set`還對`equals`和`hashCode`操作的行為增加了更強的約定,從而即使它們的實現類型不同,也可以有意義地比較`Set`實例。 如果兩個`Set`實例包含相同的元素,則它們相等。 基于上述原因,它**沒有基于列表**的元素索引的操作。 它只有由`Collection`接口繼承的方法。 實現`Set`接口的主要類為: `EnumSet`,`HashSet`,`LinkedHashSet`,`TreeSet`。 閱讀更多有關 Java 文檔的信息。 #### 9)`HashSet`如何存儲元素? 您必須知道`HashMap`存儲具有一個條件的鍵值對,即鍵將是唯一的。 `HashSet`使用映射的此特性來確保元素的唯一性。 在`HashSet`類中,映射聲明如下: ```java private transient HashMap<E,Object> map; //This is added as value for each key private static final Object PRESENT = new Object(); ``` 因此,**將元素存儲在`HashSet`中時,會將元素存儲為`map`中的鍵,將`PRESENT`對象存儲為值**。 (請參見上面的聲明)。 ```java public boolean add(E e) { return map.put(e, PRESENT)==null; } ``` 我強烈建議您閱讀這篇文章: [**`HashMap`如何在 Java 中工作?**](//howtodoinjava.com/java/collections/how-hashmap-works-in-java/ "How hashmap works in java")這篇文章將幫助您輕松地回答所有與 HashMap 相關的問題。 #### 10)是否可以將`null`元素添加到`TreeSet`或`HashSet`中? 如您所見,上一個問題的`add()`方法中沒有`null`檢查。 并且`HashMap`還允許一個`null`鍵,因此在`HashSet`中允許一個`null`。 `TreeSet`使用與`HashSet`相同的概念進行內部邏輯,但是使用`NavigableMap`來存儲元素。 ```java private transient NavigableMap<E,Object> m; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); ``` `NavigableMap`是`SortedMap`的子類型,不允許使用`null`鍵。 因此,本質上,`TreeSet` 也不支持空鍵。 如果您嘗試在`TreeSet`中添加`null`元素,它將拋出`NullPointerException`。 ## Java 集合面試 – `Map`接口問題 #### 11)為什么要使用`Map`接口? 什么是實現`Map`接口的主要類? `Map`接口是一種特殊的集合類型,它用于存儲鍵值對。 因此,它不會擴展`Collection`接口。 該接口提供了在映射的各種視圖上添加,刪除,搜索或迭代的方法。 實現 Map 接口的主要類有:**`HashMap`,`Hashtable`,`EnumMap`,`IdentityHashMap`,`LinkedHashMap`和 `Properties`**。 #### 12)什么是`IdentityHashMap`和`WeakHashMap`? `IdentityHashMap`與`HashMap`相似,不同之處在于**在比較元素**時使用引用相等性。 `IdentityHashMap`類不是一種廣泛使用的`Map`實現。 盡管此類實現了`Map`接口,但它有意違反`Map`的一般協定,該協定要求在比較對象時必須使用`equals()`方法。`IdentityHashMap`設計為僅在少數情況下使用,其中需要引用相等語義。 `WeakHashMap`是`Map`接口的實現,**該接口僅存儲對其鍵的弱引用**。 當不再在`WeakHashMap`外部引用鍵值對時,僅存儲弱引用將允許對鍵值對進行垃圾回收。 該類主要用于與`equals`方法使用`==`運算符測試對象標識的鍵對象一起使用。 一旦丟棄了這樣的鍵,就永遠無法重新創建它,因此以后不可能在`WeakHashMap`中對該鍵進行查找,并且會驚訝地發現它的條目已被刪除。 #### 13)解釋`ConcurrentHashMap`嗎? 怎么運行的? *來自 Java 文檔:* **支持檢索的完全并發和用于更新**的可調整預期并發的哈希表。 此類遵循與`Hashtable`相同的特性規范,并且包括與`Hashtable`的每個方法相對應的方法的版本。 但是,即使所有操作都是線程安全的,檢索操作也不需要進行鎖定,并且不支持以阻止所有訪問的方式鎖定整個表。 在依賴于其線程安全性但不依賴于其同步詳細信息的程序中,此類可與`Hashtable`完全互操作。 閱讀有關[**`ConcurrentHashMap`面試問題**](//howtodoinjava.com/java/collections/popular-hashmap-and-concurrenthashmap-interview-questions/ "Popular HashMap and ConcurrentHashMap interview questions")的更多信息。 #### 14)`HashMap`如何工作? **最重要的問題**在每個工作面試中最有可能出現。 您必須在這個主題上非常清楚。不僅因為它是最常被問到的問題,而且會打開您對集合 API 相關的其他問題的思路。 這個問題的答案非常大,您應該閱讀我的文章:[**`HashMap`如何工作?**](//howtodoinjava.com/java/collections/how-hashmap-works-in-java/ "How hashmap works in java")現在,讓我們記住`HashMap`在哈希原理上工作。 根據定義,映射是:“將鍵映射到值的對象”。 為了存儲這種結構,**使用了內部類`Entry`**: ```java static class Entry implements Map.Entry { final K key; V value; Entry next; final int hash; ...//More code goes here } ``` 此處,鍵和值變量用于存儲鍵值對。 整個條目對象存儲在數組中。 ```java /** * The table, re-sized as necessary. Length MUST Always be a power of two. */ transient Entry[] table; ``` 數組的索引是根據`Key`對象的哈希碼計算的。 閱讀更多鏈接主題。 #### 15)如何為哈希表設計一個好的鍵? 在回答`HashMap`如何工作后,通常會跟進另一個好問題。 好吧,最重要的約束是,您將來必須能夠取回值對象。 否則,沒有使用這種數據結構。 如果您了解`hashmap`的工作原理,將會發現它很大程度上取決于`Key`對象的`hashCode()`和`equals()`方法。 因此,好的鍵對象**必須一次又一次提供相同的`hashCode()`**,無論它被獲取了多少次。 同樣,與`equals()`方法比較時,相同的鍵**必須返回`true`,而不同的鍵必須返回`false`** 。 因此,**不變類被認為是`HashMap`鍵**的最佳候選者。 閱讀更多: [**如何為`HashMap`設計一個好的鍵?**](//howtodoinjava.com/java/collections/how-to-design-a-good-key-for-hashmap/ "How to design a good key for HashMap") #### 16)`Map`接口提供哪些不同的`Collection`視圖? Map 接口提供了 3 個存儲在其中的鍵值對的視圖: * 鍵集視圖 * 值集視圖 * 條目集視圖 可以使用迭代器瀏覽所有視圖。 #### 17)什么時候使用`HashMap`或`TreeMap`? `HashMap`是眾所周知的類,我們所有人都知道。 因此,我將離開這部分,說它用于存儲鍵值對,并允許對這樣的對集合執行許多操作。 `TreeMap`是`HashMap`的特殊形式。 **它維護`HashMap`類中缺少的鍵**的順序。 默認情況下,此排序為“自然排序”。 通過提供`Comparator`類的實例,可以覆蓋默認順序,該類的`compare`方法將用于維護鍵的順序。 請注意,**所有插入映射的鍵都必須實現`Comparable`接口**(這是確定順序的必要條件)。 此外,所有這些鍵必須相互可比較:`k1.compareTo(k2)`不得為映射中的任何鍵`k1`和`k2`拋出`ClassCastException`。 如果用戶嘗試將鍵放入違反此約束的映射中(例如,用戶嘗試將字符串鍵放入其鍵為整數的映射中),則`put(Object key, Object value)`調用將引發`ClassCastException`。 ## Java 集合面試 – 講述差異問題 #### 18)`Set`和`List`之間的區別? 最明顯的區別是: * `Set`是無序集合,其中`List`是基于零索引的有序集合。 * 列表允許重復元素,但`Set`不允許重復。 * `List`不會阻止插入空元素(隨您喜歡),但是`Set`將只允許一個空元素。 #### 19)`List`和`Map`之間的區別? 也許是最簡單的問題。 **列表是元素的集合,而`map`是鍵值對**的集合。 實際上,有很多差異源自第一個語句。 它們具有**單獨的頂層接口,單獨的一組通用方法,不同的受支持方法和不同的集合視圖**。 我會花很多時間來回答這個問題,僅作為第一個區別就足夠了。 #### 20)`HashMap`和`HashTable`之間的區別? Java 中的`HashMap`和`Hashtable`之間有一些區別: * `Hashtable`是同步的,而`HashMap`不是同步的。 * 哈希表不允許使用空鍵或空值。 `HashMap`允許一個空鍵和任意數量的空值。 * `HashMap`與`Hashtable`之間的第三個重要區別是`HashMap`中的`Iterator`是快速失??敗的迭代器,而`Hashtable`的枚舉器則不是。 #### 21)`Vector`和`ArrayList`之間的區別? 讓我們記下差異: * `Vector`的所有方法都是同步的。 但是,`ArrayList`的方法不同步。 * `Vector`是在 JDK 的第一個版本中添加的舊類。 當在 Java 中引入集合框架時,`ArrayList`是 JDK 1.2 的一部分。 * 默認情況下,`Vector`在內部調整大小時會將其數組的大小加倍。 但是,重新調整大小時,`ArrayList`的大小增加一半。 #### 22)迭代器和枚舉器之間的區別? 迭代器與枚舉器在以下三個方面有所不同: * 迭代器允許調用方使用其`remove()`方法在迭代過程中從基礎集合中刪除元素。 使用枚舉器時,不能從集合中添加/刪除元素。 * 枚舉器在舊類(例如`Vector`/`Stack`等)中可用,而`Iterator`在所有現代集合類中可用。 * 另一個小的區別是`Iterator`改進了方法名稱,例如`Enumeration.hasMoreElement()`)變為`Iterator.hasNext()`,`Enumeration.nextElement()`變為`Iterator.next()`等。 #### 23)`HashMap`和`HashSet`之間的區別? `HashMap`是鍵值對的集合,而`HashSet`是唯一元素的無序集合。 而已。 無需進一步描述。 #### 24)`Iterator`和`ListIterator`之間的區別? 有三個區別: * 我們可以使用`Iterator`遍歷`Set`和`List`以及`Map`的`Object`類型。 但是列表迭代器可用于遍歷列表類型的對象,但不能遍歷對象的集合類型。 * 通過使用`Iterator`,我們只能從正向檢索`Collection`對象中的元素,而`List Iterator`則允許您使用`hasPrevious()`和`previous()`方法在任一方向上遍歷。 * `ListIterator`允許您使用`add() remove()`方法修改列表。 使用`Iterator`不能添加,只能刪除元素。 #### 25)`TreeSet`和`SortedSet`之間的區別? `SortedSet`是`TreeSet`實現的接口。 就是這樣! #### 26)`ArrayList`和`LinkedList`之間的區別? * `LinkedList`將元素存儲在雙鏈列表數據結構中。`ArrayList`將元素存儲在動態調整大小的數組中。 * `LinkedList`允許進行固定時間的插入或刪除,但只允許順序訪問元素。 換句話說,您可以向前或向后瀏覽列表,但是在中間抓取一個元素所花費的時間與列表的大小成正比。 另一方面,`ArrayList`允許隨機訪問,因此您可以在固定時間內抓取任何元素。 但是,從末端開始的任何地方添加或刪除,都需要將后面的所有元素移開,以形成開口或填補空白。 * `LinkedList`比`ArrayList`具有更多的內存開銷,因為在`ArrayList`中,每個索引僅保存實際的對象(數據),但是在`LinkedList`的情況下,每個節點都保存下一個和上一個節點的數據以及地址。 ## 更多面試面試問題 #### 27)如何使集合只讀? 使用以下方法: * `Collections.unmodifiableList(list)` * `Collections.unmodifiableSet(set)` * `Collections.unmodifiableMap(map)` 這些方法采用集合參數,并返回一個具有與原始集合中相同的元素的新的只讀`collection`。 #### 28)如何使集合線程安全? 使用以下方法: * `Collections.synchronizedList(list)` * `Collections.synchronizedSet(set)` * `Collections.synchronizedMap(map)` 上面的方法將集合作為參數并返回相同類型的集合,這些類型是同步的并且是線程安全的。 #### 29)為什么沒有像`Iterator.add()`這樣的方法將元素添加到集合中? 迭代器的唯一目的是通過集合進行枚舉。 所有集合都包含` add()`方法以實現您的目的。 `Iterator`的添加毫無意義,因為**集合可能有序,也可能沒有排序**。 而且`add()`方法對于有序和無序集合不能具有相同的實現。 #### 30)有哪些不同的方法可以遍歷列表? 您可以使用以下方式遍歷列表: * 迭代器循環 * `for`循環 * `for`循環(高級) * `While`循環 閱讀更多: [http://www.mkyong.com/java/how-do-loop-iterate-a-list-in-java/](http://www.mkyong.com/java/how-do-loop-iterate-a-list-in-java/) #### 31)通過迭代器快速失敗屬性您了解什么? **快速失敗迭代器一旦意識到自迭代開始以來`Collection`的結構已更改,便會失敗**。 結構更改意味著在一個線程迭代該集合時,從集合中添加,刪除或更新任何元素。 通過保留修改計數來實現快速失敗行為,如果迭代線程實現了修改計數的更改,則會引發`ConcurrentModificationException`。 #### 32)快速失敗和故障安全之間有什么區別? 您已經在上一個問題中理解了快速失敗。 **故障安全迭代器**與快速失敗相反。 **如果您修改要在其上進行迭代的基礎集合**,它們將永遠不會失敗,因為它們在`Collection`的克隆而不是原始集合上起作用,這就是為什么將它們稱為故障保護迭代器。 `CopyOnWriteArrayList`的迭代器是故障安全迭代器的示例,而且`ConcurrentHashMap keySet`編寫的迭代器也是故障安全迭代器,并且永遠不會拋出`ConcurrentModificationException`。 #### 33)如何在迭代集合時避免`ConcurrentModificationException`? 您應該首先嘗試**查找故障安全**的另一個替代迭代器。 例如,如果您正在使用`List`,則可以使用`ListIterator`。 如果它是舊式集合,則可以使用枚舉。 如果上述選項不可行,則可以使用以下三種更改之一: * 如果使用的是 JDK1.5 或更高版本,則可以使用`ConcurrentHashMap`和`CopyOnWriteArrayList`類。 這是推薦的方法。 * 您可以將列表轉換為數組,然后在數組上進行迭代。 * 您可以通過將列表放在同步塊中來在迭代時鎖定列表。 請注意,最后兩種方法會導致性能下降。 #### 34)什么是`UnsupportedOperationException`? 實際的集合類型不支持的被調用方法拋出的**異常**。 例如,如果您使用`Collections.unmodifiableList(list)`創建一個只讀列表列表,然后調用`add()`或`remove()`方法,那將會發生什么。 它應該明確拋出`UnsupportedOperationException`。 #### 35)哪些集合類別可隨機訪問其元素? `ArrayList`,`HashMap`,`TreeMap`,`Hashtable`類提供對其元素的隨機訪問。 #### 36)什么是`BlockingQueue`? **一個隊列,它另外支持以下操作:在檢索元素時等待隊列變為非空,并在存儲元素時等待隊列中的空間變為可用。** `BlockingQueue`方法有四種形式:一種拋出異常,第二種返回特殊值(根據操作的不同,返回`null`或`false`),第三種無限期地阻塞當前線程,直到操作成功為止;第四種在放棄之前盡在給定的最大時間限制內阻塞。 閱讀文章中的阻塞隊列示例用法: [**如何使用阻塞隊列?**](//howtodoinjava.com/java-5/how-to-use-blockingqueue-and-threadpoolexecutor-in-java/ "How to use BlockingQueue and ThreadPoolExecutor in java") #### 37)什么是隊列和棧,列出它們之間的差異? **設計用于在處理之前保存元素的集合。** 除了基本的集合操作之外,隊列還提供其他插入,提取和檢查操作。 **通常但不一定以 FIFO(先進先出)的方式對元素進行排序。** **棧也是隊列的一種形式,但有一個區別,那就是 LIFO(后進先出)。** 無論使用哪種順序,隊列的開頭都是該元素,可以通過調用`remove()`或`poll()`將其刪除。 另請注意,棧和向量都已同步。 **用法**:如果要按接收順序處理傳入流,請使用隊列。適用于工作列表和處理請求。 如果只想從棧頂部推動并彈出,請使用棧。 適用于遞歸算法。 #### 38)什么是`Comparable`和`Comparator`接口? 在 Java 中。 所有具有自動排序特性的集合都使用比較方法來確保元素的正確排序。 例如,使用排序的類為`TreeSet`,`TreeMap`等。 **為了對一個類的數據元素進行排序**,需要實現`Comparator`或`Comparable`接口。 這就是所有包裝器類(例如`Integer`,`Double`和`String`類)都實現`Comparable`接口的原因。 **`Comparable`幫助保留默認的自然排序,而`Comparator`幫助以某些特殊的必需排序模式對元素進行排序。** 比較器的實例,通常在支持集合時作為集合的構造器參數傳遞。 #### 39)什么是`Collections`和`Arrays`類? **`Collections`和`Arrays`類是支持集合框架核心類的特殊工具類。** 它們提供工具函數以獲取只讀/同步集合,以各種方式對集合進行排序等。 `Arrays`還幫助對象數組轉換為集合對象。 `Arrays`還具有一些特性,有助于復制或處理部分數組對象。 #### 40)推薦資源 好吧,這不是面試的問題.. :-)。 這只是為了好玩。 但是您應該真正閱讀我的博客,以獲取有關集合框架知識的更多帖子。 希望這些 Java 集合面試問題對您的下一次面試有所幫助。 此外,除了本文之外,我建議您閱讀更多有關上述問題的信息。 更多的知識只會幫助您。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看