/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠSa Ãº l ĠD ÃŃ az Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . se ff ord . kor . repositories . components Ċ Ċ import Ġkotlin . collections . Linked HashSet Ċ Ċ /** Ċ Ġ* ĠBasic Ġimplementation Ġof Ġa ĠL RU Ġby Ġquantity Ġrather Ġthan Ġweight . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTake Ġinto Ġaccount Ġthis ĠL RU Ġworks Ġon Ġquantity Ġ( e . g . Ġ 2 0 0 Ġelements ) Ġrather Ċ Ġ* Ġthan Ġa Ġsize Ġof Ġthe Ġelement Ġitself , Ġso Ġmeasure Ġcarefully Ġthe Ġaverage Ġsize Ċ Ġ* Ġof Ġthe Ġelement Ġbecause Ġyou Ġmight Ġfind Ġyour Ġcache Ġocc upy ing Ġtoo Ġmuch Ċ Ġ* Ġmemory Ġor Ġdisk Ġspace . Ċ Ġ* Ċ Ġ* Ġ@ author ĠSa ul ĠD ia z Ġ< se ff ord @ gmail . com > Ċ Ġ*/ Ċ class ĠL ru Cache < K > Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew ĠL RU Ġcache Ġof Ġmax Ġsize ĠmaxSize Ċ Ġ* Ċ Ġ* Ġ@ param ĠmaxSize ĠMaximum Ġamount Ġof Ġelement Ġthis ĠL RU Ġwill Ġhold Ġat Ġmost Ċ Ġ*/ Ċ ( ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMax Ġsize Ġthe Ġcache Ġwill Ġnot Ġgrow Ġover ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠmaxSize : ĠInt ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBackbone Ġof Ġthe ĠL RU ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġval Ġvalues : ĠLinked HashSet < K > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . values Ġ= ĠLinked HashSet ( 0 , ĠDEFAULT _ LOAD _ FACTOR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġput ( value : ĠK ?): ĠK ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġprevious : ĠK ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( values . contains ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh ( value ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( values . size Ġ== ĠmaxSize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Ġ= Ġvalues . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . remove ( previous ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvalues . add ( value ) ĊĠĠĠĠĠĠĠ Ġreturn Ġprevious ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġrefresh ( value : ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalues . remove ( value ) ĊĠĠĠĠĠĠĠ Ġvalues . add ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġremove ( value : ĠK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalues . remove ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġcontains ( key : ĠK ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalues . contains ( key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalues . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ LOAD _ FACTOR Ġ= Ġ. 7 5 f ĊĠĠĠ Ġ} Ċ } Ċ