package Ġhm . b ink ley . labs . sk r atch Ċ Ċ /** Ċ Ġ* ĠImplements Ġan ĠL RU Ġcache . Ġ ĠThis Ġcache Ġhas Ġno Ġconfigurable Ġstrategies Ġfor Ċ Ġ* Ġe viction . ĠThe Ġcache Ġhas Ġa Ġ[ capacity ], Ġand Ġwhen Ġfull , Ġev ict s Ġlast Ġaccessed Ċ Ġ* Ġentries Ġupon Ġaddition Ġof Ġnew Ġentries . Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġit Ġis Ġan Ġextension Ġof Ġ[ Linked HashMap ] Ġwith Ġthe Ġdefault Ġload Ċ Ġ* Ġfactor Ġ( 0 . 7 5 ). Ċ Ġ* Ċ Ġ* ĠIt Ġis Ġa Ġbug Ġin Ġthe Ġ[ Linked HashMap ] ĠAPI Ġthat Ġ` access Order ` Ġis Ġa Ġboolean Ċ Ġ* Ġrather Ġthan Ġan Ġenum . Ġ` true ` Ġfor Ġ` access Order ` Ġmeans Ġuse Ġaccess Ġorder ; Ċ Ġ* Ġ` false ` Ġmeans Ġuse Ġinsertion Ġorder . Ġ ĠA Ġmore Ġclear ĠAPI Ġwould Ġmake Ġthese Ċ Ġ* Ġexplicit Ġin Ġthe Ġenum Ġvalue Ġnam ings . Ċ Ġ* Ċ Ġ* Ġ* NB * Ġ& mdash ; Ġhard Ġto Ġgro k Ġfrom Ġthe Ġdocs , Ġbut Ġaccess Ġorder Ġin Ċ Ġ* Ġ[ Linked HashMap ] Ġis Ġfrom Ġ_ last Ġrecently Ġused _ Ġto Ġ_ most Ġrecently Ġused _. Ċ Ġ* Ċ Ġ* Ġ@ todo ĠDoes Ġnot Ġconsider Ġconcurrent Ġaccess Ċ Ġ*/ Ċ class ĠL RU Cache ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHow Ġmany ĠL RU Ġentries Ġto Ġkeep ? Ġ ĠCap acity Ġmust Ġbe Ġnon - negative . ĠSize Ġof ĊĠĠĠĠ Ġ* Ġ 0 Ġ( zero ) Ġmeans Ġno Ġcaching . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġcapacity : ĠInt , ĊĠĠĠ Ġ/** ĠWhat Ġvalue Ġto Ġprovide Ġon Ġa Ġcache Ġmiss ? Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġcache Miss : ĠInt Ġ= Ġ- 1 , Ċ ) Ġ: ĠLinkedHashMap < Int , ĠInt >( ĊĠĠĠ Ġcapacity , ĊĠĠĠĠ 0 . 7 5 f , Ġ// ĠThe Ġdefault : Ġnot Ġavailable Ġas Ġa Ġpublic Ġconstant ĊĠĠĠ Ġtrue , Ġ// ĠUse Ġaccess Ġorder Ġ( old Ġto Ġnew ), Ġnot Ġinsertion Ġorder Ċ ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( 0 Ġ> Ġcapacity ) Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Capacity Ġfor ĠL RU Cache Ġmust Ġbe Ġnon - negative : Ġ$ capacity " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġthe ĠL RU Ġcache Ġis Ġat Ġmaximum Ġ[ capacity ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ isEmpty ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Full () Ġ= Ġcapacity Ġ== Ġsize ĊĊĠĠĠ Ġoverride Ġfun Ġget ( key : ĠInt ): ĠInt Ġ= Ġsuper . get ( key ) Ġ?: Ġcache Miss ĊĊĠĠĠ Ġoverride Ġfun Ġput ( key : ĠInt , Ġvalue : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġmaybe Remove Ol dest Entry () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . put ( key , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmaybe Remove Ol dest Entry () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Full ()) Ġremove ( keys . first ()) Ġ// ĠKeys Ġare Ġin Ġold - to - new Ġorder ĊĠĠĠ Ġ} Ċ } Ċ