<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    LinkedHashMap

    public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>

    Map 接口的哈希表和鏈接列表實現,具有可預知的迭代順序。此實現與 HashMap 的不同之處在于,后者維護著一個運行于所有條目的雙重鏈接列表。此鏈接列表定義了迭代順序,該迭代順序通常就是將鍵插入到映射中的順序(插入順序)。注意,如果在映射中重新插入 鍵,則插入順序不受影響。(如果在調用 m.put(k, v)m.containsKey(k) 返回了 true,則調用時會將鍵 k 重新插入到映射 m 中。)

    此實現可以讓客戶避免未指定的、由 HashMap(及 Hashtable)所提供的通常為雜亂無章的排序工作,同時無需增加與 TreeMap 相關的成本。使用它可以生成一個與原來順序相同的映射副本,而與原映射的實現無關:

         void foo(Map m) {
    Map copy = new LinkedHashMap(m);
    ...
    }
    如果模塊通過輸入得到一個映射,復制這個映射,然后返回由此副本確定其順序的結果,這種情況下這項技術特別有用。(客戶通常期望返回的內容與其出現的順序相同。)

    提供特殊的構造方法來創建鏈接哈希映射,該哈希映射的迭代順序就是最后訪問其條目的順序,從近期訪問最少到近期訪問最多的順序(訪問順序)。這種映射很適合構建 LRU 緩存。調用 putget 方法將會訪問相應的條目(假定調用完成后它還存在)。putAll 方法以指定映射的條目集合迭代器提供的鍵-值映射關系的順序,為指定映射的每個映射關系生成一個條目訪問。任何其他方法均不生成條目訪問。特別是,collection 視圖上的操作 影響底層映射的迭代順序。

    可以重寫 removeEldestEntry(Map.Entry) 方法來實施策略,以便在將新映射關系添加到映射時自動移除舊的映射關系。

    此類提供所有可選的 Map 操作,并且允許 null 元素。與 HashMap 一樣,它可以為基本操作(addcontainsremove)提供穩定的性能,假定哈希函數將元素正確分布到桶中。由于增加了維護鏈接列表的開支,其性能很可能比 HashMap 稍遜一籌,不過這一點例外:LinkedHashMap 的 collection 視圖迭代所需時間與映射的大小 成比例。HashMap 迭代時間很可能開支較大,因為它所需要的時間與其容量 成比例。

    鏈接的哈希映射具有兩個影響其性能的參數:初始容量加載因子。它們的定義與 HashMap 極其相似。要注意,為初始容量選擇非常高的值對此類的影響比對 HashMap 要小,因為此類的迭代時間不受容量的影響。

    注意,此實現不是同步的。如果多個線程同時訪問鏈接的哈希映射,而其中至少一個線程從結構上修改了該映射,則它必須 保持外部同步。這一般通過對自然封裝該映射的對象進行同步操作來完成。如果不存在這樣的對象,則應該使用 Collections.synchronizedMap 方法來“包裝”該映射。最好在創建時完成這一操作,以防止意外的非同步訪問:

        Map m = Collections.synchronizedMap(new LinkedHashMap(...));
    結構修改是指添加或刪除一個或多個映射關系,或者在按訪問順序鏈接的哈希映射中影響迭代順序的任何操作。在按插入順序鏈接的哈希映射中,僅更改與映射中已包含鍵關聯的值不是結構修改。在按訪問順序鏈接的哈希映射中,僅利用 get 查詢映射不是結構修改。

    Collection(由此類的所有 collection 視圖方法所返回)的 iterator 方法返回的迭代器都是快速失敗 的:在迭代器創建之后,如果從結構上對映射進行修改,除非通過迭代器自身的移除方法,其他任何時間任何方式的修改,迭代器都將拋出 ConcurrentModificationException。因此,面對并發的修改,迭代器很快就會完全失敗,而不冒將來不確定的時間任意發生不確定行為的風險。

    注意,迭代器的快速失敗行為無法得到保證,因為一般來說,不可能對是否出現不同步并發修改做出任何硬性保證。快速失敗迭代器會盡最大努力拋出 ConcurrentModificationException。因此,編寫依賴于此異常的程序的方式是錯誤的,正確做法是:迭代器的快速失敗行為應該僅用于檢測程序錯誤。

    此類是 Java Collections Framework 的成員。


    posted on 2008-11-14 17:13 gembin 閱讀(728) 評論(0)  編輯  收藏 所屬分類: JavaSE

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 中文字幕精品亚洲无线码二区| 无码永久免费AV网站| 无码视频免费一区二三区| 1a级毛片免费观看| 亚洲精品美女久久777777| 51午夜精品免费视频| 最近免费中文字幕MV在线视频3| a视频免费在线观看| 亚洲中文字幕无码爆乳av中文| 亚洲av第一网站久章草| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲国产日韩一区高清在线| 野花香高清视频在线观看免费| 久久精品国产亚洲沈樵| 亚洲av无码不卡久久| 亚洲爆乳成av人在线视菜奈实| 午夜色a大片在线观看免费| 亚洲人成网站免费播放| 国产三级电影免费观看| 久青草国产免费观看| 国产av无码专区亚洲av果冻传媒| 免费a级毛片无码a∨免费软件| 亚洲成人中文字幕| 爱情岛论坛亚洲品质自拍视频网站| 国产免费一区二区三区VR| 成人午夜影视全部免费看| 亚洲s色大片在线观看| 免费精品久久久久久中文字幕| 亚洲午夜激情视频| 麻豆成人久久精品二区三区免费| 亚洲最新在线视频| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲s码欧洲m码吹潮| 国产免费啪嗒啪嗒视频看看| 一级毛片免费不卡| 亚洲午夜精品久久久久久人妖| 最近2019中文字幕免费看最新| 十八禁的黄污污免费网站| 亚洲人成电影亚洲人成9999网| 午夜男人一级毛片免费 | 亚洲一区二区久久|