/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ /* Ċ Ġ* ĠBased Ġon ĠG WT ĠLinkedHashMap Ċ Ġ* ĠCopyright Ġ 2 0 0 8 ĠGoogle ĠInc . Ċ Ġ*/ Ċ package Ġkotlin . collections Ċ Ċ import Ġkotlin . collections . Mutable Map . Mutable Entry Ċ Ċ /** Ċ Ġ* ĠHash Ġtable Ġbased Ġimplementation Ġof Ġthe Ġ[ Mutable Map ] Ġinterface , Ġwhich Ġaddition ally Ġpre serves Ġthe Ġinsertion Ġorder Ċ Ġ* Ġof Ġentries Ġduring Ġthe Ġiteration . Ċ Ġ* Ċ Ġ* ĠThe Ġinsertion Ġorder Ġis Ġpreserved Ġby Ġmaintaining Ġa Ġdoub ly - linked Ġlist Ġof Ġall Ġof Ġits Ġentries . Ċ Ġ*/ Ċ public Ġactual Ġopen Ġclass ĠLinkedHashMap < K , ĠV > Ġ: ĠHashMap < K , ĠV >, ĠMutable Map < K , ĠV > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġentry Ġwe Ġuse Ġincludes Ġnext / prev Ġpointers Ġfor Ġa Ġdoub ly - linked Ġcircular ĊĠĠĠĠ Ġ* Ġlist Ġwith Ġa Ġhead Ġnode . ĠThis Ġreduces Ġthe Ġspecial Ġcases Ġwe Ġhave Ġto Ġdeal Ġwith ĊĠĠĠĠ Ġ* Ġin Ġthe Ġlist Ġoperations . ĊĊĠĠĠĠ Ġ* ĠNote Ġthat Ġwe Ġduplicate Ġthe Ġkey Ġfrom Ġthe Ġunderlying Ġhash Ġmap Ġso Ġwe Ġcan Ġfind ĊĠĠĠĠ Ġ* Ġthe Ġel dest Ġentry . ĠThe Ġalternative Ġwould Ġhave Ġbeen Ġto Ġmodify ĠHashMap Ġso Ġmore ĊĠĠĠĠ Ġ* Ġof Ġthe Ġcode Ġwas Ġdirectly Ġusable Ġhere , Ġbut Ġthis Ġwould Ġhave Ġadded Ġsome ĊĠĠĠĠ Ġ* Ġoverhead Ġto ĠHashMap , Ġor Ġto Ġre implement Ġmost Ġof Ġthe ĠHashMap Ġcode Ġhere Ġwith ĊĠĠĠĠ Ġ* Ġsmall Ġmodifications . ĠPay ing Ġa Ġsmall Ġstorage Ġcost Ġonly Ġif Ġyou Ġuse ĊĠĠĠĠ Ġ* ĠLinkedHashMap Ġand Ġminim izing Ġcode Ġsize Ġseemed Ġlike Ġa Ġbetter Ġtrade off ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinner Ġclass ĠChain Entry < K , ĠV >( key : ĠK , Ġvalue : ĠV ) Ġ: ĠAbstract Mutable Map . Simple Entry < K , ĠV >( key , Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġnext : ĠChain Entry < K , ĠV >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġprev : ĠChain Entry < K , ĠV >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( newValue : ĠV ): ĠV Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Linked HashMap . check IsMutable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . setValue ( newValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠEntry Set Ġ: ĠAbstract Entry Set < Mutable Entry < K , ĠV >, ĠK , ĠV >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinner Ġclass ĠEntry Iterator Ġ: ĠMutable Iterator < Mutable Entry < K , ĠV >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġlast Ġentry Ġthat Ġwas Ġreturned Ġfrom Ġthis Ġiterator . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlast : ĠChain Entry < K , ĠV >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġnext Ġentry Ġto Ġreturn Ġfrom Ġthis Ġiterator . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġnext : ĠChain Entry < K , ĠV >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġhead Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Last Known Structure ( map , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnext Ġ!== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠMutable Entry < K , ĠV > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Structural Change ( map , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! hasNext ()) Ġthrow ĠNoSuch ElementException () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= Ġnext !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġcurrent . next . take If Ġ{ Ġit Ġ!== Ġhead Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( last Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Entry Set . check IsMutable () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Structural Change ( map , Ġthis ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast !!. remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . remove ( last !!. key ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Last Known Structure ( map , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd ( element : ĠMutable Entry < K , ĠV >): ĠBoolean Ġ= Ġthrow ĠUnsupportedOperationException (" Add Ġis Ġnot Ġsupported Ġon Ġentries ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Linked HashMap . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontains Entry ( element : ĠMap . Entry < K , ĠV >): ĠBoolean Ġ= Ġthis @ Linked HashMap . contains Entry ( element ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġoperator Ġfun Ġiterator (): ĠMutable Iterator < Mutable Entry < K , ĠV >> Ġ= ĠEntry Iterator () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove Entry ( element : ĠMap . Entry < K , ĠV >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck IsMutable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contains ( element )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Linked HashMap . remove ( element . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġthis @ Linked HashMap . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck IsMutable (): ĠUnit Ġ= Ġthis @ Linked HashMap . check IsMutable () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* ĊĠĠ Ġ* ĠThe Ġhead Ġof Ġthe Ġinsert Ġorder Ġchain , Ġwhich Ġis Ġa Ġdoub ly - linked Ġcircular ĊĠĠ Ġ* Ġlist . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThe Ġmost Ġrecently Ġinserted Ġnode Ġis Ġat Ġthe Ġend Ġof Ġthe Ġchain , Ġie . ĊĠĠ Ġ* Ġchain . prev . ĊĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġhead : ĠChain Entry < K , ĠV >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġthis Ġnode Ġto Ġthe Ġend Ġof Ġthe Ġchain . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠChain Entry < K , ĠV >. addTo End () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġentry Ġis Ġnot Ġin Ġthe Ġlist . ĊĠĠĠĠĠĠĠ Ġcheck ( next Ġ== Ġnull Ġ&& Ġprev Ġ== Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ_ head Ġ= Ġhead ĊĠĠĠĠĠĠĠ Ġif Ġ(_ head Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhead Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChain Ġis Ġvalid . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ_ tail Ġ= ĠcheckNotNull (_ head . prev ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġme . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Ġ= Ġ_ tail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġ_ head ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġmy Ġnew Ġs iblings : Ġcurrent Ġhead Ġand Ġold Ġtail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ head . prev Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ tail . next Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġthis Ġnode Ġfrom Ġthe Ġchain Ġit Ġis Ġa Ġpart Ġof . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠChain Entry < K , ĠV >. remove () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . next Ġ=== Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthis Ġis Ġsingle Ġelement , Ġremove Ġhead ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhead Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( head Ġ=== Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthis Ġis Ġfirst Ġelement , Ġmove Ġhead Ġto Ġnext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhead Ġ= Ġnext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext !!. prev Ġ= Ġprev ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev !!. next Ġ= Ġnext ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnext Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprev Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠ Ġ* ĠThe Ġhash map Ġthat Ġkeeps Ġtrack Ġof Ġour Ġentries Ġand Ġthe Ġchain . ĠNote Ġthat Ġwe ĊĠĠ Ġ* Ġduplicate Ġthe Ġkey Ġhere Ġto Ġeliminate Ġchanges Ġto ĠHashMap Ġand Ġminimize Ġthe ĊĠĠ Ġ* Ġcode Ġhere , Ġat Ġthe Ġexpense Ġof Ġadditional Ġspace . ĊĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġmap : ĠHashMap < K , ĠChain Entry < K , ĠV >> ĊĊĠĠĠ Ġprivate Ġvar Ġis ReadOnly : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġan Ġempty Ġ[ Linked HashMap ] Ġinstance . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġactual Ġconstructor () Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Ġ= ĠHashMap < K , ĠChain Entry < K , ĠV >>() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġconstructor ( back ing Map : ĠHashMap < K , ĠAny >) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ġ// Ġexpected Ġto Ġwork Ġdue Ġto Ġer asure ĊĠĠĠĠĠĠĠ Ġmap Ġ= Ġbacking Map Ġas ĠHashMap < K , ĠChain Entry < K , ĠV >> ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġan Ġempty Ġ[ Linked HashMap ] Ġinstance . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ Ġinitial Capacity Ġthe Ġinitial Ġcapacity Ġ( ignored ) ĊĠĠĠĠ Ġ* Ġ@ param Ġ Ġload Factor ĠĠĠĠĠ Ġthe Ġload Ġfactor Ġ( ignored ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġinitial Ġcapacity Ġor Ġload Ġfactor Ġare Ġnegative ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġactual Ġconstructor ( initial Capacity : ĠInt , Ġload Factor : ĠFloat ) Ġ: Ġsuper ( initial Capacity , Ġload Factor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Ġ= ĠHashMap < K , ĠChain Entry < K , ĠV >>() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġconstructor ( initial Capacity : ĠInt ) Ġ: Ġthis ( initial Capacity , Ġ 0 . 0 f ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġan Ġinstance Ġof Ġ[ Linked HashMap ] Ġfilled Ġwith Ġthe Ġcontents Ġof Ġthe Ġspecified Ġ[ original ] Ġmap . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġactual Ġconstructor ( original : ĠMap < out ĠK , ĠV >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Ġ= ĠHashMap < K , ĠChain Entry < K , ĠV >>() ĊĠĠĠĠĠĠĠ Ġthis . put All ( original ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġfun Ġbuild (): ĠMap < K , ĠV > Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck IsMutable () ĊĠĠĠĠĠĠĠ Ġis ReadOnly Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck IsMutable () ĊĠĠĠĠĠĠĠ Ġmap . clear () ĊĠĠĠĠĠĠĠ Ġhead Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊ Ċ // ĠĠĠ Ġoverride Ġfun Ġclone (): ĠAny Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠLinkedHashMap ( this ) Ċ // ĠĠĠ Ġ} ĊĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġcontains Key ( key : ĠK ): ĠBoolean Ġ= Ġmap . containsKey ( key ) ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġcontains Value ( value : ĠV ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnode : ĠChain Entry < K , ĠV > Ġ= Ġhead Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . value Ġ== Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ= Ġnode . next !! ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( node Ġ!== Ġhead ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġoverride Ġfun Ġcreate Entry Set (): ĠMutable Set < Mutable Map . Mutable Entry < K , ĠV >> Ġ= ĠEntry Set () ĊĊĠĠĠ Ġactual Ġoverride Ġoperator Ġfun Ġget ( key : ĠK ): ĠV ? Ġ= Ġmap . get ( key )?. value ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġput ( key : ĠK , Ġvalue : ĠV ): ĠV ? Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck IsMutable () ĊĊĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġmap . get ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( old Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Entry Ġ= ĠChain Entry ( key , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( key , Ġnew Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Entry . addTo End () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold . setValue ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġfun Ġremove ( key : ĠK ): ĠV ? Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck IsMutable () ĊĊĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġmap . remove ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( entry Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġentry . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġmap . size ĊĊĠĠĠ Ġinternal Ġoverride Ġfun Ġcheck IsMutable () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is ReadOnly ) Ġthrow ĠUnsupportedOperationException () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠConstructs Ġthe Ġspecialized Ġimplementation Ġof Ġ[ Linked HashMap ] Ġwith Ġ[ String ] Ġkeys , Ġwhich Ġstores Ġthe Ġkeys Ġas Ġproperties Ġof Ċ Ġ* ĠJS Ġobject Ġwithout Ġhashing Ġthem . Ċ Ġ*/ Ċ public Ġfun Ġ< V > Ġlinked String Map Of ( var arg Ġpairs : ĠPair < String , ĠV >): ĠLinkedHashMap < String , ĠV > Ġ{ ĊĠĠĠ Ġreturn ĠLinkedHashMap < String , ĠV >( string Map Of < Any > ()). apply Ġ{ Ġput All ( pairs ) Ġ} Ċ } Ċ