<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 中的集合 > 原文: [https://howtodoinjava.com/java-collections/](https://howtodoinjava.com/java-collections/) 顧名思義,集合是一組對象。 **Java 集合框架**由接口和類組成,這些接口和類有助于處理不同類型的集合,例如**列表,集合,映射,棧和隊列**等。 這些現成的集合類解決了許多非常常見的問題,在這些問題中,我們需要處理一組同構對象和異類對象。 其中的常見操作涉及**添加,刪除,更新,排序,搜索**和更復雜的算法。 這些集合類使用**集合 API** 為所有此類操作提供了非常透明的支持。 ## 1\. Java 集合層次結構 借助**核心接口**可以更好地理解集合框架。 集合類實現這些接口并提供具體功能。 ![Java Collections Hierarchy](https://img.kancloud.cn/87/9e/879e20af6f1a2dbb117dd40cf5d80ecb_402x146.png) Java 集合層次結構 #### 1.1 集合 **集合接口**位于層次結構的根部。 集合接口提供所有集合類必須支持(或拋出`UnsupportedOperationException`)的所有通用方法。 它擴展了`Iterable`接口,該接口使用“[**`for-each`循環**](https://howtodoinjava.com/java/basics/enhanced-for-each-loop-in-java/)”語句添加了對集合元素進行迭代的支持。 所有其他集合接口和類(`Map`除外)都可以擴展或實現此接口。 例如,列表(已索引,有序)和集(已排序)接口實現了此集合。 #### 1.2 列表 **列表**表示元素的**有序**集合。 使用列表,我們可以按元素的整數索引(列表中的位置)訪問元素,并在列表中搜索元素。 索引以`0`開頭,就像數組一樣。 實現`List`接口的一些有用的類是 – `ArrayList`,`CopyOnWriteArrayList`, `LinkedList`,`Stack`和`Vector`。 #### 1.3 集 **集**代表**排序的**元素的集合。 集合不允許重復的元素。`Set`接口不能保證以任何可預測的順序返回元素。 盡管某些`Set`實現以其[自然順序](https://howtodoinjava.com/java/collections/java-comparable-interface/)存儲元素并保證此順序。 實現`Set`接口的一些有用的類是 – `ConcurrentSkipListSet`, `CopyOnWriteArraySet`, `EnumSet`,`HashSet`,`LinkedHashSet`和`TreeSet`。 #### 1.4 映射 `Map`接口使我們能夠將數據存儲在*鍵值對*中(鍵應該是不可變的)。 映射不能包含重復的鍵; 每個鍵最多可以映射到一個值。 `Map`接口提供了三個集合視圖,這些視圖允許將映射的內容作為一組鍵,值的集合或一組鍵值映射來查看。 一些映射實現(例如`TreeMap`類)對其順序做出特定的保證。 其他的(例如`HashMap`類)則沒有。 實現`Map`接口的一些有用的類是 – `ConcurrentHashMap`,`ConcurrentSkipListMap`,`EnumMap`,`HashMap`,`HashTable`,`IdentityHashMap`,`LinkedHashMap`,`Property`,`TreeMap`和`WeakHashMap`。 #### 1.5 `Stack` Java `Stack`接口表示經典的棧數據結構,其中的元素可以被推入對象的后進先出(LIFO)棧。 在棧中,我們將元素推到棧的頂部,然后再次從棧頂部彈出。 #### 1.6 `Queue` 隊列數據結構旨在在由使用者線程進行處理之前保存元素(由生產者線程放入)。 除了基本的“集合”操作外,隊列還提供其他插入,提取和檢查操作。 隊列通常但不一定以 FIFO(先進先出)的方式對元素進行排序。 一種此類異常情況是優先級隊列,該隊列根據提供的[比較器](https://howtodoinjava.com/java/collections/java-comparator/)或元素的自然順序對元素進行排序。 通常,隊列不支持阻止插入或檢索操作。 阻塞隊列實現類實現了`BlockingQueue`接口。 實現`Map`接口的一些有用的類是 – `ArrayBlockingQueue`,`ArrayDeque`,`ConcurrentLinkedDeque`,`ConcurrentLinkedQueue`,`DelayQueue`,`LinkedBlockingDeque`,`LinkedBlockingQueue`,`LinkedList`,`LinkedTransferQueue`,`PriorityBlockingQueue`,`PriorityQueue`和`SynchronousQueue`。 #### 1.7 `Deque` 一個雙端隊列(發音為“DQ”),支持兩端的元素插入和移除。 當雙端隊列用作隊列時,將產生 [FIFO(先進先出)](https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics))行為。 當雙端隊列用作棧時,將產生 LIFO(后進先出)行為。 此接口應優先于舊版`Stack`類使用。 當雙端隊列用作棧時,元素從雙端隊列的開頭被壓入并彈出。 實現此接口的一些常見的已知類是`ArrayDeque`,`ConcurrentLinkedDeque`,`LinkedBlockingDeque`和`LinkedList`。 ## 2\. Java 集合和泛型 有目的的[泛型](https://howtodoinjava.com/java/generics/complete-java-generics-tutorial/)提供類型安全性。 它檢測到不兼容的類型(在方法參數中),并在運行時防止`ClassCastException`。 同樣在 Java 集合中,我們可以定義一個集合類以僅存儲某種類型的對象。 所有其他類型均應禁止。 這是通過泛型完成的。 在給定的示例中,允許使用前兩個`add()`方法。 第三者將無法編譯并給出錯誤 - “類型為`HashMap<Integer,String>`的`put(Integer, String)`方法不適用于參數`(String, String)`”。 它有助于及早發現不兼容的類型,以防止運行時發生不可預測的行為。 ```java HashMap<Integer, String> map = new HashMap<>(); map.put(1, "A"); //allowed map.put(2, "B"); //allowed map.put("3", "C"); //NOT allowed - Key is string ``` ## 3\. `equals()`和`hashCode()`方法 許多集合類提供特定的特征,例如排序的元素,沒有重復的元素等。要實現此行為,添加的元素(對象)必須正確實現 [`equals()`和`hashCode()`方法](https://howtodoinjava.com/java/basics/java-hashcode-equals-methods/)。 所有 Java 包裝器類和`String`類均以其特定實現覆蓋這些函數,因此它們在此類集合中的行為正確。 我們還需要確保在用戶定義的自定義類中正確覆蓋了這些函數。 ```java SortedSet<Integer> sortedSet = new TreeSet<>(); sortedSet.add(2); sortedSet.add(1); sortedSet.add(1); sortedSet.add(3); System.out.println(sortedSet); //[1,2,3] ``` ## 4\. Java 8 集合 [Java 8](https://howtodoinjava.com/java-8-tutorial/) 是主要版本,它引入了 Java 編程中的 [lambda 樣式](https://howtodoinjava.com/java8/complete-lambda-expressions-tutorial-in-java/)。 結果,集合類也得到了改善。 例如,我們可以單行遍歷集合,并使用`forEach`語句對集合的所有元素執行操作。 ```java ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.forEach(System.out::print); ``` ## 5\. Java 集合的好處 * **一致且可重用的API** – 這是任何框架所做的。 它提供了一組一致的類方法,這些方法可用于一遍又一遍地解決一組類似的問題,而不會得到無法預測的結果。 Java 集合框架還有助于以一致的方式解決與一組對象有關的常見問題。 所有集合類都具有一致的實現,并提供一些常見的方法,例如`add`,`get`,`put`,`remove`等。無論您要處理哪種數據結構,這些方法都將根據基礎實現工作并透明地執行操作。 * **更少的開發時間** – 通用且可預測的框架總是會減少開發時間,并有助于快速編寫應用程序。 Java 集合還有助于對對象和集合執行一些最重復的常見任務,從而改善時間因素。 * **性能** – Java 集合 API 是由一些最杰出的行業人士編寫的,它們的性能在大多數情況下都是一流的。 Oracle 和非常熱心的 Java 開發人員社區正在進行的開發工作有助于使它變得更好。 * **干凈的代碼** – 這些 API 都是使用所有良好的[編碼慣例](https://howtodoinjava.com/java-best-practices/)編寫的,并且記錄得很好。 它們在整個 Java 集合框架中遵循特定的標準。 它使程序員的代碼看起來干凈整潔。 由于一致的類和方法名稱,因此代碼也更易于閱讀。 ## 6\. Java 集合示例 * [數組](https://howtodoinjava.com/java-array/) * [`ArrayList`](https://howtodoinjava.com/java-arraylist/) * [`LinkedList`](https://howtodoinjava.com/java/collections/java-linkedlist-class/) * [`HashMap`](https://howtodoinjava.com/java-hashmap/) * [`HashMap`](https://howtodoinjava.com/java/collections/hashtable-class/) * [`LinkedHashMap`](https://howtodoinjava.com/java/collections/linkedhashmap/) * [`TreeMap`](https://howtodoinjava.com/java/collections/treemap-class/) * [`HashSet`](https://howtodoinjava.com/java/collections/java-hashset/) * [`LinkedHashSet`](https://howtodoinjava.com/java/collections/java-linkedhashset/) * [`TreeSet`](https://howtodoinjava.com/java/collections/java-treeset-class/) * [`Comparable`](https://howtodoinjava.com/java/collections/java-comparable-interface/) * [`Comparator`](https://howtodoinjava.com/java/collections/java-comparator/) * [`Iterator`](https://howtodoinjava.com/java/collections/java-iterator/) * [`ListIterator`](https://howtodoinjava.com/java/collections/java-listiterator/) * [`Spliterator`](https://howtodoinjava.com/java/collections/java-spliterator/) * [`PriorityQueue`](https://howtodoinjava.com/java/collections/java-priorityqueue/) * [`PriorityBlockingQueue`](https://howtodoinjava.com/java/collections/java-priorityblockingqueue/) * [`ArrayBlockingQueue`](https://howtodoinjava.com/java/collections/java-arrayblockingqueue/) * [`LinkedTransferQueue`](https://howtodoinjava.com/java/collections/transferqueue-linkedtransferqueue/) * [`CopyOnWriteArrayList`](https://howtodoinjava.com/java/collections/java-copyonwritearraylist/) * [`CopyOnWriteArraySet`](https://howtodoinjava.com/java/collections/java-copyonwritearrayset/) * [集合排序](https://howtodoinjava.com/java-sorting-guide/) * [面試問題](https://howtodoinjava.com/interview-questions/useful-java-collection-interview-questions/) 閱讀更多: [Wikepedia 鏈接](https://en.wikipedia.org/wiki/Java_collections_framework) [Java 文檔](https://docs.oracle.com/javase/tutorial/collections/index.html)
                  <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>

                              哎呀哎呀视频在线观看