<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # `HashMap`和`Hashtable`之間的區別 > 原文: [https://beginnersbook.com/2014/06/difference-between-hashmap-and-hashtable/](https://beginnersbook.com/2014/06/difference-between-hashmap-and-hashtable/) `HashMap`和`Hashtable`有什么區別?這是 Java / J2EE 專業人員常見的[面試問題](https://beginnersbook.com/2013/05/java-interview-questions/)之一。`HashMap`和`Hashtable`這兩個類實現了`java.util.Map`接口,但它們的工作方式和用法存在差異。在這里,我們將討論這些類之間的差異。 ## `HashMap` vs `Hashtable` 1) [`HashMap`](https://beginnersbook.com/2013/12/hashmap-in-java-with-example/)是非同步的。這意味著如果它在多線程環境中使用,那么多個線程可以同時訪問和處理`HashMap`。 [`Hashtable`](https://docs.oracle.com/javase/6/docs/api/java/util/Hashtable.html)已同步。它確保在給定時刻不超過一個線程可以訪問`Hashtable`。在`Hashtable`上工作的線程獲取一個鎖,使其他線程等待,直到它的工作完成。 2)`HashMap`允許一個空鍵和任意數量的空值。 `Hashtable`不允許使用`null`鍵和`null`值。 3)`HashMap`實現[`LinkedHashMap`](https://beginnersbook.com/2013/12/linkedhashmap-in-java/) 維護插入順序, [`TreeMap`](https://beginnersbook.com/2013/12/treemap-in-java-with-example/) 根據鍵的升序對映射進行排序。 `Hashtable`不保證任何順序。它不以任何特定順序維護映射。 4)最初`Hashtable`不是[集合框架](https://beginnersbook.com/java-collections-tutorials/)的一部分,它在被改進以實現`Map`接口之后成為了一個集合框架成員。 `HashMap`實現了`Map`接口,從一開始就是集合框架的一部分。 5)這些類之間的另一個區別是`HashMap`的迭代器是一個快速失敗并拋出[`ConcurrentModificationException`](https://docs.oracle.com/javase/6/docs/api/java/util/ConcurrentModificationException.html)如果任何其他`Thread`通過添加或刪除除迭代器自己的`remove()`方法之外的任何元素在結構上修改映射。簡單來說,快速失敗意味著:當調用`iterator.next()`時,如果在創建迭代器和調用`next()`的那一刻之間進行了任何修改,則立即拋出`ConcurrentModificationException`。 `Hashtable`的枚舉器不是快速失敗的。 對于例如 `HashMap`: ```java HashMap hm= new HashMap(); .... .... Set keys = hm.keySet(); for (Object key : keys) { //it will throw the ConcurrentModificationException here hm.put(object & value pair here); } ``` **Hashtable:** ```java Hashtable ht= new Hashtable(); .... ..... Enumeration keys = ht.keys(); for (Enumeration en = ht.elements() ; en.hasMoreElements() ; en.nextElement()) { //No exception would be thrown here ht.put(key & value pair here); } ``` ## 何時使用`HashMap`和`Hashtable`? 1)如上所述,`HashMap`與`Hashtable`是同步。如果需要線程安全操作,那么可以使用`Hashtable`,因為它的所有方法都是同步的,但它應該是遺留類,應該避免,因為它沒有任何關于它,`HashMap`無法完成。對于[多線程](https://beginnersbook.com/2013/03/multithreading-in-java/)環境,我建議你使用`ConcurrentHashMap`(幾乎類似于 Hashtable),甚至可以使`HashMap`顯式同步([在這里閱讀](https://beginnersbook.com/2013/12/how-to-synchronize-hashmap-in-java-with-example/))。 2)同步操作性能較差,因此除非需要,否則應避免使用。因此,對于非線程環境,應該毫無疑問地使用`HashMap`。
                  <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>

                              哎呀哎呀视频在线观看