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

woaidongmao

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

java中Map類的理解。

Map以按鍵/數(shù)值對的形式存儲數(shù)據(jù),和數(shù)組非常相似,在數(shù)組中存在的索引,它們本身也是對象。  
      Map
的接口  
      Map
---實現(xiàn)Map  
      Map.Entry
--Map的內(nèi)部類,描述Map中的按鍵/數(shù)值對。  
      SortedMap---
擴展Map,使按鍵保持升序排列  
   
     
關(guān)于怎么使用,一般是選擇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 的具體實現(xiàn)包括 ArrayList Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲和操作任何類型對象的元素列表。 List 適用于按數(shù)值索引訪問元素的情形。

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

了解 Map 接口和方法

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

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

equals(Object o)

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

hashCode()

返回此 Map 的哈希碼

Map 構(gòu)建

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

2 Map 更新方法:可以更改 Map 內(nèi)容。

clear()

Map 中刪除所有映射

remove(Object key)

Map 中刪除鍵和關(guān)聯(lián)的值

put(Object key, Object value)

將指定值與指定鍵相關(guān)聯(lián)

clear()

Map 中刪除所有映射

putAll(Map t)

將指定 Map 中的所有映射復(fù)制到此 map

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

查看 Map

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

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

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

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

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

我運行了一個小測試(隨附文件中的 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 包含一個嵌入的監(jiān)測器,它測量內(nèi)存和執(zhí)行時間,使您能夠快速識別代碼中的瓶頸。 我曾使用 Jdeveloper 的執(zhí)行監(jiān)測器監(jiān)測 HashMap containsKey() containsValue() 方法,并很快發(fā)現(xiàn) containsKey() 方法的速度比 containsValue() 方法慢很多(實際上要慢幾個數(shù)量級!)。 (參見圖 1 圖 2,以及隨附文件中的 Test2 類)。

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

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

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

entrySet()

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

keySet()

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

values()

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

訪問元素

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

4 Map 訪問和測試方法:這些方法檢索有關(guān) Map 內(nèi)容的信息但不更改 Map 內(nèi)容。

get(Object key)

返回與指定鍵關(guān)聯(lián)的值

containsKey(Object key)

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

containsValue(Object value)

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

isEmpty()

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

size()

返回 Map 中的鍵-值映射的數(shù)目

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

 

posted on 2009-08-17 11:33 肥仔 閱讀(1135) 評論(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>
            在线观看亚洲视频| 亚洲国产综合在线| 亚洲久久视频| 久久激情视频| 午夜精品美女自拍福到在线| 亚洲黄一区二区三区| 欧美一级日韩一级| 美国成人直播| 日韩一级精品| 亚洲日韩成人| 国产欧美日韩综合一区在线播放| 麻豆久久婷婷| 在线亚洲+欧美+日本专区| 久久亚洲国产成人| 亚洲免费在线| 欧美一二三区在线观看| 亚洲精品一区二区网址| 老司机精品视频网站| 欧美成人精品在线观看| 欧美成人免费在线观看| 亚洲国产一区二区三区在线播| 久久九九久久九九| 亚洲电影免费在线观看| 亚洲精品一区二区三区在线观看| 农村妇女精品| 国产精品成人v| 久久精品欧美日韩精品| 午夜精品久久久久99热蜜桃导演| 欧美一级大片在线免费观看| 麻豆精品视频在线观看视频| 欧美三级特黄| 影院欧美亚洲| 欧美a级片一区| 亚洲夜晚福利在线观看| 老司机成人在线视频| 亚洲欧洲一区二区三区在线观看| 中文精品一区二区三区| 久久这里有精品视频| 久久久久91| 99ri日韩精品视频| 亚洲一区二区免费视频| 欧美精品一区在线发布| 国产亚洲在线观看| 夜夜躁日日躁狠狠久久88av| 久久综合九色| 欧美精品久久99| 亚洲高清视频中文字幕| 久久久亚洲人| 午夜精品美女自拍福到在线| 免费一级欧美片在线观看| 一二三区精品福利视频| 亚洲欧美国产va在线影院| 欧美午夜精品久久久久久超碰| 小辣椒精品导航| 蜜臀av性久久久久蜜臀aⅴ| 亚洲欧美日韩另类精品一区二区三区| 久久成人精品无人区| 国产午夜久久久久| 午夜精品免费视频| 免费看成人av| 欧美一区二区三区喷汁尤物| 日韩视频免费观看| 亚洲一级黄色| 国产精品视频内| 国产综合精品一区| 久久成人精品视频| 亚洲视频一区二区免费在线观看| 国产一区二区成人| 9l国产精品久久久久麻豆| 欧美激情精品久久久久久大尺度| 亚洲国产高清高潮精品美女| 夜夜爽夜夜爽精品视频| 在线成人中文字幕| 午夜国产精品视频| 亚洲图片激情小说| 男男成人高潮片免费网站| 久久国产欧美日韩精品| 欧美婷婷久久| 亚洲精品乱码久久久久久按摩观| 国产欧美日韩综合| 中国日韩欧美久久久久久久久| 亚洲黄色一区| 久久久久久久一区二区| 亚洲日本aⅴ片在线观看香蕉| 亚洲欧洲av一区二区| 亚洲主播在线播放| 欧美在线播放一区| 91久久精品国产91久久性色tv| 午夜精品www| 午夜精品成人在线| 欧美午夜精品久久久久久浪潮| 亚洲日本黄色| 一本色道久久综合| 欧美激情一级片一区二区| 欧美超级免费视 在线| 在线观看国产一区二区| 久久精品视频在线看| 久久久噜噜噜久久| 狠狠色香婷婷久久亚洲精品| 久久资源在线| 黄色成人在线网站| 久久精品免费观看| 免费高清在线视频一区·| 尤物九九久久国产精品的特点| 久久久之久亚州精品露出| 欧美91视频| 亚洲精品一区在线观看香蕉| 亚洲性图久久| 久久av免费一区| 激情综合电影网| aaa亚洲精品一二三区| 亚洲午夜免费福利视频| 久久免费视频一区| 午夜视频在线观看一区| 国产欧美一区二区精品忘忧草 | 久久久久九九九九| 欧美高清不卡| 欧美视频久久| 亚洲一区欧美一区| 久久久久久9| 亚洲欧洲精品天堂一级| 欧美三级日韩三级国产三级| 性色av一区二区三区红粉影视| 久久久999精品| 亚洲人成久久| 国产精品久久久久一区二区三区共 | 久久成人这里只有精品| 国产一区导航| 欧美成人亚洲成人| 一本一本a久久| 亚洲精品国产精品国产自| 欧美在线亚洲| 亚洲激情成人在线| 1000部国产精品成人观看| 欧美国产日产韩国视频| 亚洲午夜免费视频| 欧美sm极限捆绑bd| 亚洲综合丁香| 亚洲国产精品久久久| 国产精品欧美精品| 欧美福利视频网站| 欧美在线精品一区| 日韩亚洲欧美一区二区三区| 久久先锋影音| 亚洲欧美日韩在线播放| 最近中文字幕日韩精品| 国产视频欧美| 欧美色欧美亚洲另类七区| 久久视频免费观看| 午夜日本精品| 一本色道久久综合亚洲精品不卡 | 欧美高清一区| 性色av一区二区三区在线观看| 亚洲精品久久久久久一区二区| 久久视频免费观看| 性欧美1819性猛交| 亚洲午夜电影| 999亚洲国产精| 亚洲国产日韩欧美在线图片| 国产亚洲精品bv在线观看| 国产精品大片| 欧美日韩黄色大片| 99国产精品久久久久老师 | 欧美高清在线观看| 久久精品国产69国产精品亚洲| 一区二区三区高清在线| 91久久在线播放| 欧美激情免费在线| 亚洲视频在线一区| 亚洲精品美女久久7777777| 黄色成人av网站| 国产日韩欧美在线播放不卡| 欧美视频不卡| 欧美日韩另类综合| 香蕉免费一区二区三区在线观看 | 欧美91精品| 噜噜噜噜噜久久久久久91| 久久精品72免费观看| 午夜精品一区二区三区四区| 亚洲图片在线观看| 亚洲天堂网在线观看| 在线亚洲国产精品网站| 欧美性一区二区| 欧美精品三级| 欧美巨乳在线观看| 欧美日韩日韩| 国产精品第十页| 国产精品五月天| 国产欧美视频在线观看| 国产在线观看一区| 在线电影国产精品| 亚洲毛片在线观看| 亚洲一区二区视频在线观看| 亚洲一卡久久| 亚洲黄色成人网| 欧美激情第三页| 欧美国产日韩精品免费观看| 欧美韩国日本一区| 欧美午夜无遮挡| 国产模特精品视频久久久久|