欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java源碼解析TreeMap簡(jiǎn)介

 更新時(shí)間:2019年01月08日 10:05:19   作者:李燦輝  
今天小編就為大家分享一篇關(guān)于Java源碼解析TreeMap簡(jiǎn)介,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

TreeMap是常用的排序樹(shù),本文主要介紹TreeMap中,類的注釋中對(duì)TreeMap的介紹。代碼如下。

/**
 * A Red-Black tree based {@link NavigableMap} implementation.
 * The map is sorted according to the {@linkplain Comparable natural
 * ordering} of its keys, or by a {@link Comparator} provided at map
 * creation time, depending on which constructor is used.
 * <p>This implementation provides guaranteed log(n) time cost for the
 * {@code containsKey}, {@code get}, {@code put} and {@code remove}
 * operations. Algorithms are adaptations of those in Cormen, Leiserson, and
 * Rivest's <em>Introduction to Algorithms</em>.
 * <p>Note that the ordering maintained by a tree map, like any sorted map, and
 * whether or not an explicit comparator is provided, must be <em>consistent
 * with {@code equals}</em> if this sorted map is to correctly implement the
 * {@code Map} interface. (See {@code Comparable} or {@code Comparator} for a
 * precise definition of <em>consistent with equals</em>.) This is so because
 * the {@code Map} interface is defined in terms of the {@code equals}
 * operation, but a sorted map performs all key comparisons using its {@code
 * compareTo} (or {@code compare}) method, so two keys that are deemed equal by
 * this method are, from the standpoint of the sorted map, equal. The behavior
 * of a sorted map <em>is</em> well-defined even if its ordering is
 * inconsistent with {@code equals}; it just fails to obey the general contract
 * of the {@code Map} interface.
 * <p><strong>Note that this implementation is not synchronized.</strong>
 * If multiple threads access a map concurrently, and at least one of the
 * threads modifies the map structurally, it <em>must</em> be synchronized
 * externally. (A structural modification is any operation that adds or
 * deletes one or more mappings; merely changing the value associated
 * with an existing key is not a structural modification.) This is
 * typically accomplished by synchronizing on some object that naturally
 * encapsulates the map.
 * If no such object exists, the map should be "wrapped" using the
 * {@link Collections#synchronizedSortedMap Collections.synchronizedSortedMap}
 * method. This is best done at creation time, to prevent accidental
 * unsynchronized access to the map: <pre>
 *  SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));</pre>
 * <p>The iterators returned by the {@code iterator} method of the collections
 * returned by all of this class's "collection view methods" are
 * <em>fail-fast</em>: if the map is structurally modified at any time after
 * the iterator is created, in any way except through the iterator's own
 * {@code remove} method, the iterator will throw a {@link
 * ConcurrentModificationException}. Thus, in the face of concurrent
 * modification, the iterator fails quickly and cleanly, rather than risking
 * arbitrary, non-deterministic behavior at an undetermined time in the future.
 * <p>Note that the fail-fast behavior of an iterator cannot be guaranteed
 * as it is, generally speaking, impossible to make any hard guarantees in the
 * presence of unsynchronized concurrent modification. Fail-fast iterators
 * throw {@code ConcurrentModificationException} on a best-effort basis.
 * Therefore, it would be wrong to write a program that depended on this
 * exception for its correctness:  <em>the fail-fast behavior of iterators
 * should be used only to detect bugs.</em>
 * <p>All {@code Map.Entry} pairs returned by methods in this class
 * and its views represent snapshots of mappings at the time they were
 * produced. They do <strong>not</strong> support the {@code Entry.setValue}
 * method. (Note however that it is possible to change mappings in the
 * associated map using {@code put}.)
 * <p>This class is a member of the
 * <a href="{@docRoot}/../technotes/guides/collections/index.html" rel="external nofollow" >
 * Java Collections Framework</a>.
 * @param <K> the type of keys maintained by this map
 * @param <V> the type of mapped values
 * @author Josh Bloch and Doug Lea
 * @see Map
 * @see HashMap
 * @see Hashtable
 * @see Comparable
 * @see Comparator
 * @see Collection
 * @since 1.2
 **/

這是一個(gè)基于紅黑樹(shù)的可導(dǎo)航的實(shí)現(xiàn)。這個(gè)map基于key的可比較的自然順序,或者基于在map創(chuàng)建時(shí)提供的Comparator的順序來(lái)存儲(chǔ)元素。

這個(gè)實(shí)現(xiàn)提供可保證的log(n)的時(shí)間復(fù)雜度來(lái)完成containsKey,get,put和remove操作。

需要注意到這一點(diǎn),不管是否顯式提供了排序器,如果這個(gè)排序map想要正確實(shí)現(xiàn)Map接口,tree map維護(hù)的順序必須和equals保持一致,就像任何排序map那樣。之所以會(huì)這樣,是因?yàn)镸ap接口是根據(jù)equals操作來(lái)定義的,但是排序map進(jìn)行所有key的比較時(shí)使用的是他們的compareTo方法,所以,從排序map的觀點(diǎn)來(lái)看,被這個(gè)方法認(rèn)為相等的兩個(gè)key,才是相等的。盡管如果它的順序和equals不一致,排序map的行為也是正常的,它只是沒(méi)有遵守Map接口的通常約定。

請(qǐng)注意這個(gè)實(shí)現(xiàn)是非同步的。如果多個(gè)線程并發(fā)訪問(wèn)一個(gè)treemap,并且至少有一個(gè)線程修改結(jié)構(gòu),必須進(jìn)行外部同步。這個(gè)通常是通過(guò)在包含這個(gè)map的對(duì)象上進(jìn)行同步來(lái)實(shí)現(xiàn)的。如果沒(méi)有這樣的對(duì)象,那么這個(gè)map需要用Collections.synchronizedSortedMap方法包裝一下。最好是在創(chuàng)建map時(shí)就這樣做,以防止意外非同步訪問(wèn)這個(gè)map。代碼如下SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));

所有這個(gè)類的集合視角方法返回的集合的iterator方法返回的迭代器都是fast-fail的:如果迭代器創(chuàng)建后的任何時(shí)間map發(fā)生了結(jié)構(gòu)性改變,除了通過(guò)迭代器的刪除方法外,迭代器都會(huì)拋出同步修改異常。于是,面對(duì)同步修改時(shí),迭代器會(huì)迅速干凈的失敗,而不是冒著在未來(lái)的不確定的時(shí)間發(fā)生不一致或無(wú)法確定的行為的風(fēng)險(xiǎn)。

這個(gè)類和它的視圖的方法返回的Map.Entry對(duì)代表了他們被創(chuàng)建時(shí)的快照。他們不支持Entry.setValue方法。

這個(gè)類是Java集合框架的一個(gè)成員。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • mybatis plus generator 根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成實(shí)體類的實(shí)現(xiàn)示例

    mybatis plus generator 根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成實(shí)體類的實(shí)現(xiàn)示例

    本文主要介紹了mybatis plus generator 根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成實(shí)體類的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解Java的Spring框架中的注解的用法

    詳解Java的Spring框架中的注解的用法

    這篇文章主要介紹了Java的Spring框架中的注解的用法,包括對(duì)Java bean的定義的作用介紹,需要的朋友可以參考下
    2015-11-11
  • MybatisPlus字段類型轉(zhuǎn)換的實(shí)現(xiàn)示例

    MybatisPlus字段類型轉(zhuǎn)換的實(shí)現(xiàn)示例

    本文主要介紹了MybatisPlus如何完成字段類型轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Java 基于UDP協(xié)議實(shí)現(xiàn)消息發(fā)送

    Java 基于UDP協(xié)議實(shí)現(xiàn)消息發(fā)送

    這篇文章主要介紹了Java 基于UDP協(xié)議實(shí)現(xiàn)消息發(fā)送,幫助大家更好的理解和學(xué)習(xí)Java網(wǎng)絡(luò)編程,感興趣的朋友可以了解下
    2020-11-11
  • Java8新特性之泛型的目標(biāo)類型推斷_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java8新特性之泛型的目標(biāo)類型推斷_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說(shuō)所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。下面通過(guò)本文給分享Java8新特性之泛型的目標(biāo)類型推斷,感興趣的朋友參考下吧
    2017-06-06
  • Java switch多值匹配操作詳解

    Java switch多值匹配操作詳解

    這篇文章主要介紹了Java switch多值匹配操作詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 基于Java類的加載方式

    基于Java類的加載方式

    這篇文章主要介紹了基于Java類的加載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 關(guān)于Spring Actuator的簡(jiǎn)單測(cè)試

    關(guān)于Spring Actuator的簡(jiǎn)單測(cè)試

    這篇文章主要介紹了關(guān)于Spring Actuator的簡(jiǎn)單測(cè)試,Spring-Actuator 是spring下的程序監(jiān)控系統(tǒng),通過(guò)簡(jiǎn)單的配置就可以查看程序的相關(guān)信息,本文提供了相關(guān)配置,需要的朋友可以參考下
    2023-10-10
  • Spring MVC InitBinder驗(yàn)證方法

    Spring MVC InitBinder驗(yàn)證方法

    這篇文章主要介紹了Spring MVC InitBinder驗(yàn)證方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • MyBatis接口綁定的實(shí)現(xiàn)方式和工作原理

    MyBatis接口綁定的實(shí)現(xiàn)方式和工作原理

    在日常開(kāi)發(fā)中,數(shù)據(jù)持久層是幾乎每個(gè)項(xiàng)目都會(huì)涉及的一個(gè)關(guān)鍵組成部分,MyBatis作為一個(gè)流行的持久層框架,其提供的接口綁定機(jī)制極大地簡(jiǎn)化了數(shù)據(jù)庫(kù)操作,本文將通過(guò)詳細(xì)的代碼示例和講解,帶你深入理解MyBatis接口綁定的工作原理和實(shí)踐方式,需要的朋友可以參考下
    2024-03-03

最新評(píng)論