Guava記錄 - Collections(一) - 不可變集合(Immutable Collections)

一航厚、簡(jiǎn)介

官網(wǎng)對(duì)Immutable Collections的簡(jiǎn)介如下:

Immutable collections, for defensive programming, constant collections, and improved efficiency.
大致意思就是可以通過(guò)不可變集合應(yīng)用于防御式編程寥掐、常量集合以及提高效率.

二、為什么使用 Immutable Collections?

guava gitlab wiki上給出的解釋是不可變對(duì)象有很多優(yōu)點(diǎn)鳍寂,包括:

1、對(duì)于不受信任的庫(kù)來(lái)說(shuō)是安全的。
2式廷、線程安全:可以由許多線程使用承冰,沒(méi)有競(jìng)爭(zhēng)條件的風(fēng)險(xiǎn)华弓。
3、不需要支持變異困乒,可以節(jié)省時(shí)間和空間的假設(shè)寂屏。所有不可變集合實(shí)現(xiàn)都比它們的可變同類(lèi)型的實(shí)現(xiàn)更節(jié)省內(nèi)存。(分析)
3、可以用作常數(shù)迁霎,期望它保持不變吱抚。
4、創(chuàng)建對(duì)象的不可變副本是一種很好的防御性編程技術(shù)考廉。Guava提供每個(gè)標(biāo)準(zhǔn)集合類(lèi)型的簡(jiǎn)單秘豹、易于使用的不可變版本,包括Guava自己的集合變體昌粤。

當(dāng)我們不期望修改一個(gè)集合既绕,或者期望一個(gè)集合保持不變時(shí),將它復(fù)制到一個(gè)不可變的集合是一個(gè)很好的辦法涮坐。

重要提示:每個(gè)Guava不可變集合實(shí)現(xiàn)都拒絕null值的凄贩。谷歌的內(nèi)部代碼庫(kù)進(jìn)行了詳盡的研究,結(jié)果表明袱讹,在大約5%的情況下疲扎,集合中允許使用null元素,而在95%的情況下捷雕,在null上快速失敗是最好的方法椒丧。如果需要使用null值,可以考慮使用集合救巷。

三壶熏、如何使用 Immutable Collections?

Immutable Collections支持多種創(chuàng)建方式

1、通過(guò)of()方法創(chuàng)建

通過(guò)of()方法創(chuàng)建的不可變集合,除了已排序的集合外征绸,其他的都是按照時(shí)間構(gòu)建來(lái)排序的久橙;

簡(jiǎn)單實(shí)驗(yàn):

 ImmutableList<String> createByOf = ImmutableList.of("a", "b");

思考點(diǎn) - 為什么是以這種方式創(chuàng)建?為什么當(dāng)節(jié)點(diǎn)是13個(gè)節(jié)點(diǎn)的時(shí)候使用數(shù)組管怠?

/**
   * Returns an immutable list containing a single element. This list behaves
   * and performs comparably to {@link Collections#singleton}, but will not
   * accept a null element. It is preferable mainly for consistency and
   * maintainability of your code.
   *
   * @throws NullPointerException if {@code element} is null
   */
  public static <E> ImmutableList<E> of(E element) {
    return new SingletonImmutableList<E>(element);
  }

  /**
   * Returns an immutable list containing the given elements, in order.
   *
   * @throws NullPointerException if any element is null
   */
  public static <E> ImmutableList<E> of(E e1, E e2) {
    return construct(e1, e2);
  }


  /**
   * Returns an immutable list containing the given elements, in order.
   *
   * @throws NullPointerException if any element is null
   * @since 3.0 (source-compatible since 2.0)
   */
  @SafeVarargs // For Eclipse. For internal javac we have disabled this pointless type of warning.
  public static <E> ImmutableList<E> of(
      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11, E e12, E... others) {
    Object[] array = new Object[12 + others.length];
    array[0] = e1;
    array[1] = e2;
    array[2] = e3;
    array[3] = e4;
    array[4] = e5;
    array[5] = e6;
    array[6] = e7;
    array[7] = e8;
    array[8] = e9;
    array[9] = e10;
    array[10] = e11;
    array[11] = e12;
    System.arraycopy(others, 0, array, 12, others.length);
    return construct(array);
  }

2淆衷、通過(guò)copyOf()方法創(chuàng)建

簡(jiǎn)單實(shí)驗(yàn):

  ImmutableList<String> createByOf = ImmutableList.of("a", "b");

  ImmutableList<String> createByCopyOf = ImmutableList.copyOf(normalList);
3、通過(guò)builder()方法創(chuàng)建

簡(jiǎn)單實(shí)驗(yàn)

  ImmutableList<String> createByBuilder = ImmutableList.<String>builder()
                .add("A")
                .add("B")
                .build();

未完待續(xù)......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渤弛,一起剝皮案震驚了整個(gè)濱河市祝拯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌她肯,老刑警劉巖佳头,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晴氨,居然都是意外死亡康嘉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)籽前,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)亭珍,“玉大人敷钾,你說(shuō)我怎么就攤上這事∫蘩妫” “怎么了阻荒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)众羡。 經(jīng)常有香客問(wèn)我侨赡,道長(zhǎng),這世上最難降的妖魔是什么粱侣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任羊壹,我火速辦了婚禮,結(jié)果婚禮上甜害,老公的妹妹穿的比我還像新娘舶掖。我一直安慰自己球昨,他們只是感情好尔店,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著主慰,像睡著了一般嚣州。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上共螺,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天该肴,我揣著相機(jī)與錄音,去河邊找鬼藐不。 笑死匀哄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雏蛮。 我是一名探鬼主播涎嚼,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挑秉!你這毒婦竟也來(lái)了法梯?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤犀概,失蹤者是張志新(化名)和其女友劉穎立哑,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體姻灶,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铛绰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了产喉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捂掰。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡若皱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尘颓,到底是詐尸還是另有隱情走触,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布疤苹,位于F島的核電站互广,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏卧土。R本人自食惡果不足惜惫皱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尤莺。 院中可真熱鬧旅敷,春花似錦、人聲如沸颤霎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)友酱。三九已至晴音,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缔杉,已是汗流浹背锤躁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留或详,地道東北人系羞。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像霸琴,于是被迫代替她去往敵國(guó)和親椒振。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這一篇文章我們來(lái)講Google Guava集合沈贝,這是Guava最成熟和為人所知的部分杠人。里面給我們提供各個(gè)集合...
    tuacy閱讀 5,218評(píng)論 0 6
  • 目前Google Guava在實(shí)際應(yīng)用中非常廣泛,本篇博客將以博主對(duì)Guava使用的認(rèn)識(shí)以及在項(xiàng)目中的經(jīng)驗(yàn)來(lái)給大家...
    張豐哲閱讀 15,285評(píng)論 12 184
  • 目前Google Guava在實(shí)際應(yīng)用中非常廣泛宋下,本篇博客將以博主對(duì)Guava使用的認(rèn)識(shí)以及在項(xiàng)目中的經(jīng)驗(yàn)來(lái)給大家...
    java高并發(fā)閱讀 1,652評(píng)論 0 8
  • 對(duì)象的創(chuàng)建與銷(xiāo)毀 Item 1: 使用static工廠方法嗡善,而不是構(gòu)造函數(shù)創(chuàng)建對(duì)象:僅僅是創(chuàng)建對(duì)象的方法,并非Fa...
    孫小磊閱讀 1,986評(píng)論 0 3
  • 華夏閱讀人格心理學(xué)学歧,做自己的心理咨詢(xún)師罩引。wzp 按照弗洛伊德的性心理發(fā)展階段,肛門(mén)期沒(méi)發(fā)展好枝笨,放東西雜亂無(wú)章...
    爬行小王的故事閱讀 2,406評(píng)論 0 0