青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

java中Map類的理解。

Map以按鍵/數值對的形式存儲數據,和數組非常相似,在數組中存在的索引,它們本身也是對象。  
      Map
的接口  
      Map
---實現Map  
      Map.Entry
--Map的內部類,描述Map中的按鍵/數值對。  
      SortedMap---
擴展Map,使按鍵保持升序排列  
   
     
關于怎么使用,一般是選擇Map的子類,而不直接用Map類。  
     
下面以HashMap為例。  
      public       static       void       main(String       args[])  
      {  
          HashMap       hashmap       =       new       HashMap();  
          hashmap.put("Item0",       "Value0");  
          hashmap.put("Item1",       "Value1");  
          hashmap.put("Item2",       "Value2");  
          hashmap.put("Item3",       "Value3");  
          Set       set       =       hashmap.entrySet();  
          Iterator       iterator       =       set.iterator();  
          while       (iterator.hasNext()  
        {  
            Map.Entry       mapentry       =       (Map.Entry)       iterator.next();  
            System.out.println(mapentry.getkey()       +       "/"       +       mapentry.getValue());  
        }  
      }  
     
注意,這里Map的按鍵必須是唯一的,比如說不能有兩個按鍵都為null  
     
如果用過它,就會知道它的用處了。

資料:

java.util 中的集合類包含 Java 中某些最常用的類。 最常用的集合類是 List Map List 的具體實現包括 ArrayList Vector,它們是可變大小的列表,比較適合構建、存儲和操作任何類型對象的元素列表。 List 適用于按數值索引訪問元素的情形。

Map 提供了一個更通用的元素存儲方法。 Map 集合類用于存儲元素對(稱作),其中每個鍵映射到一個值。 從概念上而言,您可以將 List 看作是具有數值鍵的 Map。 而實際上,除了 List Map 都在定義 java.util 中外,兩者并沒有直接的聯系。本文將著重介紹核心 Java 發行套件中附帶的 Map,同時還將介紹如何采用或實現更適用于您應用程序特定數據的專用 Map

了解 Map 接口和方法

Java 核心類中有很多預定義的 Map 類。 在介紹具體實現之前,我們先介紹一下 Map 接口本身,以便了解所有實現的共同點。 Map 接口定義了四種類型的方法,每個 Map 都包含這些方法。 下面,我們從兩個普通的方法(表 1)開始對這些方法加以介紹。

1: 覆蓋的方法。 我們將這 Object 的這兩個方法覆蓋,以正確比較 Map 對象的等價性。

equals(Object o)

比較指定對象與此 Map 的等價性

hashCode()

返回此 Map 的哈希碼

Map 構建

Map 定義了幾個用于插入和刪除元素的變換方法(表 2)。

2 Map 更新方法:可以更改 Map 內容。

clear()

Map 中刪除所有映射

remove(Object key)

Map 中刪除鍵和關聯的值

put(Object key, Object value)

將指定值與指定鍵相關聯

clear()

Map 中刪除所有映射

putAll(Map t)

將指定 Map 中的所有映射復制到此 map

盡管您可能注意到,縱然假設忽略構建一個需要傳遞給 putAll() Map 的開銷,使用 putAll() 通常也并不比使用大量的 put() 調用更有效率,但 putAll() 的存在一點也不稀奇。 這是因為,putAll() 除了迭代 put() 所執行的將每個鍵值對添加到 Map 的算法以外,還需要迭代所傳遞的 Map 的元素。 但應注意,putAll() 在添加所有元素之前可以正確調整 Map 的大小,因此如果您未親自調整 Map 的大小(我們將對此進行簡單介紹),則 putAll() 可能比預期的更有效。

查看 Map

迭代 Map 中的元素不存在直接了當的方法。 如果要查詢某個 Map 以了解其哪些元素滿足特定查詢,或如果要迭代其所有元素(無論原因如何),則您首先需要獲取該 Map 視圖。 有三種可能的視圖(參見表 3

  • 所有鍵值對參見 entrySet()
  • 所有鍵參見 keySet()
  • 所有值參見 values()

前兩個視圖均返回 Set 對象,第三個視圖返回 Collection 對象。 就這兩種情況而言,問題到這里并沒有結束,這是因為您無法直接迭代 Collection 對象或 Set 對象。要進行迭代,您必須獲得一個 Iterator 對象。 因此,要迭代 Map 的元素,必須進行比較煩瑣的編碼

Iterator keyValuePairs = aMap.entrySet().iterator();Iterator keys = aMap.keySet().iterator();Iterator values = aMap.values().iterator();

值得注意的是,這些對象(SetCollection Iterator)實際上是基礎 Map 的視圖,而不是包含所有元素的副本。 這使它們的使用效率很高。 另一方面,Collection Set 對象的 toArray() 方法卻創建包含 Map 所有元素的數組對象,因此除了確實需要使用數組中元素的情形外,其效率并不高。

我運行了一個小測試(隨附文件中的 Test1),該測試使用了 HashMap,并使用以下兩種方法對迭代 Map 元素的開銷進行了比較:

int mapsize = aMap.size();Iterator keyValuePairs1 = aMap.entrySet().iterator();for (int i = 0; i < mapsize; i++){     Map.Entry entry = (Map.Entry) keyValuePairs1.next();     Object key = entry.getKey();     Object value = entry.getValue();     ...}Object[] keyValuePairs2 = aMap.entrySet().toArray();for (int i = 0; i < rem; i++) {{     Map.Entry entry = (Map.Entry) keyValuePairs2[i];     Object key = entry.getKey();

Profilers in Oracle JDeveloper

Oracle JDeveloper 包含一個嵌入的監測器,它測量內存和執行時間,使您能夠快速識別代碼中的瓶頸。 我曾使用 Jdeveloper 的執行監測器監測 HashMap containsKey() containsValue() 方法,并很快發現 containsKey() 方法的速度比 containsValue() 方法慢很多(實際上要慢幾個數量級!)。 (參見圖 1 圖 2,以及隨附文件中的 Test2 類)。

     Object value = entry.getValue();     ...}

此測試使用了兩種測量方法: 一種是測量迭代元素的時間,另一種測量使用 toArray 調用創建數組的其他開銷。 第一種方法(忽略創建數組所需的時間)表明,使用已從 toArray 調用中創建的數組迭代元素的速度要比使用 Iterator 的速度大約快 30%-60%。 但如果將使用 toArray 方法創建數組的開銷包含在內,則使用 Iterator 實際上要快 10%-20%。 因此,如果由于某種原因要創建一個集合元素的數組而非迭代這些元素,則應使用該數組迭代元素。 但如果您不需要此中間數組,則不要創建它,而是使用 Iterator 迭代元素。

3: 返回視圖的 Map 方法: 使用這些方法返回的對象,您可以遍歷 Map 的元素,還可以刪除 Map 中的元素。

entrySet()

返回 Map 中所包含映射的 Set 視圖。 Set 中的每個元素都是一個 Map.Entry 對象,可以使用 getKey() getValue() 方法(還有一個 setValue() 方法)訪問后者的鍵元素和值元素

keySet()

返回 Map 中所包含鍵的 Set 視圖。 刪除 Set 中的元素還將刪除 Map 中相應的映射(鍵和值)

values()

返回 map 中所包含值的 Collection 視圖。 刪除 Collection 中的元素還將刪除 Map 中相應的映射(鍵和值)

訪問元素

4 中列出了 Map 訪問方法。Map 通常適合按鍵(而非按值)進行訪問。 Map 定義中沒有規定這肯定是真的,但通常您可以期望這是真的。例如,您可以期望 containsKey() 方法與 get() 方法一樣快。另一方面,containsValue() 方法很可能需要掃描 Map 中的值,因此它的速度可能比較慢。

4 Map 訪問和測試方法:這些方法檢索有關 Map 內容的信息但不更改 Map 內容。

get(Object key)

返回與指定鍵關聯的值

containsKey(Object key)

如果 Map 包含指定鍵的映射,則返回 true

containsValue(Object value)

如果此 Map 將一個或多個鍵映射到指定值,則返回 true

isEmpty()

如果 Map 不包含鍵-值映射,則返回 true

size()

返回 Map 中的鍵-值映射的數目

對使用 containsKey() containsValue() 遍歷 HashMap 中所有元素所需時間的測試表明,containsValue() 所需的時間要長很多。 實際上要長幾個數量級! (參見圖 1 圖 2,以及隨附文件中的 Test2)。 因此,如果 containsValue() 是應用程序中的性能問題,它將很快顯現出來,并可以通過監測您的應用程序輕松地將其識別。 這種情況下,我相信您能夠想出一個有效的替換方法來實現 containsValue() 提供的等效功能。 但如果想不出辦法,則一個可行的解決方案是再創建一個 Map,并將第一個 Map 的所有值作為鍵。 這樣,第一個 Map 上的 containsValue() 將成為第二個 Map 上更有效的 containsKey()

 

posted on 2009-08-17 11:33 肥仔 閱讀(1130) 評論(0)  編輯 收藏 引用 所屬分類: Web-后臺

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            牛牛国产精品| 欧美大香线蕉线伊人久久国产精品| 亚洲已满18点击进入久久| 日韩视频在线一区二区| 欧美乱妇高清无乱码| 日韩系列欧美系列| 午夜精品成人在线| 狠狠色2019综合网| 免费欧美日韩| av成人毛片| 久久免费高清| 亚洲伦理久久| 国产精品羞羞答答| 久久婷婷久久一区二区三区| 亚洲国产精品尤物yw在线观看| 黄色成人在线观看| 另类国产ts人妖高潮视频| 亚洲国产精品热久久| 亚洲免费成人av| 欧美性猛交xxxx免费看久久久| 亚洲综合色婷婷| 欧美激情影院| 久久国产精品久久久久久久久久| 亚洲国产美女久久久久 | av不卡在线观看| 久久精品论坛| 一本色道久久精品| 国产日韩亚洲欧美精品| 欧美电影在线| 久久成人精品无人区| 亚洲日本精品国产第一区| 久久高清免费观看| 亚洲一区二区三区在线观看视频| 一区二区在线视频播放| 国产精品xvideos88| 久热精品视频| 国产偷国产偷亚洲高清97cao| 亚洲欧洲精品一区二区三区不卡| 欧美一区二区三区喷汁尤物| 亚洲另类视频| 国语自产偷拍精品视频偷| 欧美午夜精品久久久久久人妖| 久久久久免费| 亚洲在线视频网站| 亚洲人屁股眼子交8| 欧美成人一区二区三区片免费| 亚洲欧美日韩久久精品| 在线一区二区三区四区| 亚洲激情成人网| 在线看日韩av| 亚洲二区在线视频| 一区二区亚洲精品| 极品尤物一区二区三区| 国产精品日韩在线| 国产精品实拍| 国产精品青草久久| 欧美激情亚洲精品| 欧美刺激性大交免费视频| 久热精品视频在线观看一区| 久久久久久亚洲综合影院红桃| 久久久精品日韩| 久久激情中文| 久久久久国产精品人| 久久久九九九九| 久久漫画官网| 欧美黑人在线播放| 欧美三日本三级少妇三99| 欧美日韩亚洲综合一区| 欧美日韩国产综合网| 欧美日韩美女一区二区| 欧美性一区二区| 国产精品视频免费一区| 国产亚洲欧美激情| 亚洲狠狠丁香婷婷综合久久久| 亚洲风情在线资源站| 亚洲人成艺术| 亚洲免费在线观看视频| 久久www成人_看片免费不卡| 久久午夜视频| 亚洲人成欧美中文字幕| 亚洲一区二区三区在线观看视频| 亚洲国产美国国产综合一区二区| 亚洲激情在线播放| 日韩一区二区精品| 亚洲欧美日韩在线高清直播| 久久精品日韩| 欧美福利小视频| 9l国产精品久久久久麻豆| 亚洲欧美制服另类日韩| 久久夜色精品一区| 欧美大片第1页| 国产精品专区第二| 国语自产偷拍精品视频偷 | 亚洲——在线| 久久久蜜臀国产一区二区| 欧美xxxx在线观看| 欧美视频中文一区二区三区在线观看| 国产精品一区久久久久| 亚洲第一综合天堂另类专| 9久草视频在线视频精品| 久久高清一区| 亚洲精品麻豆| 久久免费高清视频| 99国内精品久久| 久久人91精品久久久久久不卡| 欧美成人免费小视频| 国产日产欧产精品推荐色| 亚洲毛片av在线| 久久久久国产精品午夜一区| 亚洲精品女人| 午夜精品久久久久影视| 欧美日本三区| 亚洲福利在线观看| 性欧美大战久久久久久久久| 亚洲高清资源| 欧美一区二区三区成人| 欧美日韩国产成人| 亚洲福利专区| 久久精品夜色噜噜亚洲a∨| 一区二区三区黄色| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品美女视频网站| 一卡二卡3卡四卡高清精品视频 | 久久精品国产91精品亚洲| 亚洲欧洲精品一区| 免费在线国产精品| 欲香欲色天天天综合和网| 欧美在线观看一区二区| 亚洲视频香蕉人妖| 欧美特黄一级| 亚洲一区二区三区高清| 99国产一区| 国产精品v欧美精品v日韩 | 欧美午夜精品电影| 亚洲天堂成人| 一本色道综合亚洲| 欧美日韩免费看| 一区二区三区视频观看| 99国产精品99久久久久久| 欧美精品日韩一区| 国产精品99久久久久久久久久久久 | 亚洲精品资源| 中文久久精品| 91久久精品视频| 欧美高清在线一区二区| 亚洲人成在线播放网站岛国| 亚洲高清网站| 欧美日韩亚洲一区二区三区在线| 日韩一二三在线视频播| 亚洲作爱视频| 国产精品美女在线| 久久免费国产| 亚洲欧美日韩国产综合| 国产真实乱偷精品视频免| 毛片一区二区三区| 欧美 日韩 国产在线 | 欧美日韩国产91| 香蕉尹人综合在线观看| 久久99在线观看| 亚洲激情第一页| 在线视频亚洲欧美| 国产日韩欧美二区| 免费成人高清视频| 欧美三级视频在线| 久久精品亚洲一区二区| 老司机精品福利视频| 在线视频亚洲一区| 午夜在线电影亚洲一区| 亚洲青涩在线| 亚洲永久精品国产| 激情欧美丁香| 亚洲精品一区二区三区四区高清| 国产精品日本精品| 欧美aaa级| 欧美亚日韩国产aⅴ精品中极品| 久久精品最新地址| 久久午夜影视| 亚洲免费视频成人| 免费观看成人www动漫视频| 亚洲一区二区在线看| 美国十次成人| 久久福利毛片| 国产精品久久7| 欧美黄色免费| 国语自产精品视频在线看抢先版结局 | 精品动漫3d一区二区三区| 亚洲品质自拍| 亚洲大胆av| 欧美一区二区私人影院日本| 亚洲香蕉成视频在线观看| 久久综合亚州| 久久精品国产99国产精品| 欧美日韩高清免费| 亚洲第一精品夜夜躁人人爽| 国内精品久久久久久久影视麻豆| 亚洲视频在线观看| 亚洲在线视频| 欧美日韩亚洲一区二区三区| 亚洲第一精品久久忘忧草社区| 今天的高清视频免费播放成人|