中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中HashMap和TreeMap有什么區別

發布時間:2021-07-01 15:34:34 來源:億速云 閱讀:162 作者:Leah 欄目:互聯網科技

這期內容當中小編將會給大家帶來有關Java中HashMap和TreeMap有什么區別,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

  首先介紹一下什么是Map。在數組中我們是通過數組下標來對其內容索引的,而在Map中我們通過對象來對對象進行索引,用來索引的對象叫做key,其對應的對象叫做value。這就是我們平時說的鍵值對。

  HashMap通過hashcode對其內容進行快速查找,而 TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。

  HashMap 非線程安全 TreeMap 非線程安全

  線程安全

  在Java里,線程安全一般體現在兩個方面:

  1、多個thread對同一個java實例的訪問(read和modify)不會相互干擾,它主要體現在關鍵字synchronized。如ArrayList和Vector,HashMap和Hashtable

  (后者每個方法前都有synchronized關鍵字)。如果你在interator一個List對象時,其它線程remove一個element,問題就出現了。

  2、每個線程都有自己的字段,而不會在多個線程之間共享。它主要體現在java.lang.ThreadLocal類,而沒有Java關鍵字支持,如像static、transient那樣。

  1.AbstractMap抽象類和SortedMap接口

  AbstractMap抽象類:(HashMap繼承AbstractMap)覆蓋了equals()和hashCode()方法以確保兩個相等映射返回相同的哈希碼。如果兩個映射大小相等、包含同樣的鍵且每個鍵在這兩個映射中對應的值都相同,則這兩個映射相等。映射的哈希碼是映射元素哈希碼的總和,其中每個元素是Map.Entry接口的一個實現。因此,不論映射內部順序如何,兩個相等映射會報告相同的哈希碼。

  SortedMap接口:(TreeMap繼承自SortedMap)它用來保持鍵的有序順序。SortedMap接口為映像的視圖(子集),包括兩個端點提供了訪問方法。除了排序是作用于映射的鍵以外,處理SortedMap和處理SortedSet一樣。添加到SortedMap實現類的元素必須實現Comparable接口,否則您必須給它的構造函數提供一個Comparator接口的實現。TreeMap類是它的唯一一份實現。

  2.兩種常規Map實現

  HashMap:基于哈希表實現。使用HashMap要求添加的鍵類明確定義了hashCode()和equals()[可以重寫hashCode()和equals()],為了優化HashMap空間的使用,您可以調優初始容量和負載因子。

  (1)HashMap(): 構建一個空的哈希映像

  (2)HashMap(Map m): 構建一個哈希映像,并且添加映像m的所有映射

  (3)HashMap(int initialCapacity): 構建一個擁有特定容量的空的哈希映像

  (4)HashMap(int initialCapacity, float loadFactor): 構建一個擁有特定容量和加載因子的空的哈希映像

  TreeMap:基于紅黑樹實現。TreeMap沒有調優選項,因為該樹總處于平衡狀態。

  (1)TreeMap():構建一個空的映像樹

  (2)TreeMap(Map m): 構建一個映像樹,并且添加映像m中所有元素

  (3)TreeMap(Comparator c): 構建一個映像樹,并且使用特定的比較器對關鍵字進行排序

  (4)TreeMap(SortedMap s): 構建一個映像樹,添加映像樹s中所有映射,并且使用與有序映像s相同的比較器排序

  3.兩種常規Map性能

  HashMap:適用于在Map中插入、刪除和定位元素。

  Treemap:適用于按自然順序或自定義順序遍歷鍵(key)。

  4.總結

  HashMap通常比TreeMap快一點(樹和哈希表的數據結構使然),建議多使用HashMap,在需要排序的Map時候才用TreeMap。

  import java.util.HashMap;

  import java.util.Hashtable;

  import java.util.Iterator;

  import java.util.Map;

  import java.util.TreeMap;

  public class HashMaps {

  public static void main(String[] args) {

  Map<String, String> map = new HashMap<String, String>();

  map.put("a", "aaa");

  map.put("b", "bbb");

  map.put("c", "ccc");

  map.put("d", "ddd");

  Iterator<String> iterator = map.keySet()。iterator();

  while (iterator.hasNext()) {

  Object key = iterator.next();

  System.out.println("map.get(key) is :" + map.get(key));

  }

  // 定義HashTable,用來測試

  Hashtable<String, String> tab = new Hashtable<String, String>();

  tab.put("a", "aaa");

  tab.put("b", "bbb");

  tab.put("c", "ccc");

  tab.put("d", "ddd");

  Iterator<String> iterator_1 = tab.keySet()。iterator();

  while (iterator_1.hasNext()) {

  Object key = iterator_1.next();

  System.out.println("tab.get(key) is :" + tab.get(key));

  }

  TreeMap<String, String> tmp = new TreeMap<String, String>();

  tmp.put("a", "aaa");

  tmp.put("b", "bbb");

  tmp.put("c", "ccc");

  tmp.put("d", "cdc");

  Iterator<String> iterator_2 = tmp.keySet()。iterator();

  while (iterator_2.hasNext()) {

  Object key = iterator_2.next();

  System.out.println("tmp.get(key) is :" + tmp.get(key));

  }

  }

  }

  運行結果如下:

  map.get(key) is :ddd

  map.get(key) is :bbb

  map.get(key) is :ccc

  map.get(key) is :aaa

  tab.get(key) is :bbb

  tab.get(key) is :aaa

  tab.get(key) is :ddd

  tab.get(key) is :ccc

  tmp.get(key) is :aaa

  tmp.get(key) is :bbb

  tmp.get(key) is :ccc

  tmp.get(key) is :cdc武漢仁濟中西醫結合醫院

  HashMap的結果是沒有排序的,而TreeMap輸出的結果是排好序的。

  下面就要進入本文的主題了。先舉個例子說明一下怎樣使用HashMap:

  import java.util.*;

  public class Exp1 {

  public static void main(String[] args){

  HashMap h2=new HashMap();

  Random r1=new Random();

  for (int i=0;i<1000;i++){

  Integer t=new Integer(r1.nextInt(20));

  if (h2.containsKey(t))

  ((Ctime)h2.get(t))。count++;

  else

  h2.put(t, new Ctime());

  }

  System.out.println(h2);

  }

  }

  class Ctime{

  int count=1;

  public String toString(){

  return Integer.toString(count);

  }

  }

上述就是小編為大家分享的Java中HashMap和TreeMap有什么區別了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克拉玛依市| 海口市| 宕昌县| 理塘县| 积石山| 乌审旗| 海门市| 论坛| 兴化市| 长岛县| 项城市| 玉溪市| 崇礼县| 美姑县| 泉州市| 西峡县| 资兴市| 建水县| 吕梁市| 渑池县| 惠水县| 双柏县| 博湖县| 平凉市| 疏附县| 六盘水市| 嘉鱼县| 儋州市| 双辽市| 鄂托克旗| 壶关县| 华坪县| 德化县| 汉阴县| 封丘县| 卓资县| 磴口县| 枝江市| 读书| 宝丰县| 同仁县|