open Ġclass ĠI Equality Ġ{ ĊĠ Ġfun Ġequals ( other Ġ: ĠAny ) Ġ: ĠBoolean ĊĠĠĠ Ġ= Ġ( this Ġas Ġjava . lang . Object ). equals ( other Ġas Ġjava . lang . Object ) Ċ } Ċ Ċ open Ġclass ĠI Hash able Ġ: ĠI Equality Ġ{ ĊĠ Ġval ĠhashCode Ġ: ĠInteger ĊĠĠĠ Ġget () Ġ= Ġ( this Ġas Ġjava . lang . Object ). hashCode () Ċ Ċ } Ċ Ċ open Ġclass ĠI Map < K , ĠV > Ġ{ ĊĠ Ġfun Ġget ( key Ġ: ĠK ) Ġ: ĠV ĊĠ Ġfun Ġset ( key Ġ: ĠK , Ġvalue Ġ: ĠV ) Ġ: ĠV ĊĠ Ġfun Ġremove ( key Ġ: ĠK ) Ġ: ĠV ĊĠ Ġfun Ġcontains Key ( key Ġ: ĠK ) Ġ: ĠBoolean Ċ } Ċ Ċ class ĠHash able Wrapper ( val Ġobj Ġ: ĠAny ) Ġ: ĠI Hash able ĊĠ Ġ// Ġequals Ġand ĠhashCode Ġimplementations Ġare Ġinherited Ċ Ċ [ inline ] Ġfun ĠAny . hash able () Ġ: ĠHash able Wrapper Ġ= ĠHash able Wrapper ( this ) Ċ Ċ open Ġclass ĠI Hash ing Strategy < K > Ġ{ ĊĠ Ġfun Ġequals ( a Ġ: ĠK , Ġb Ġ: ĠK ) Ġ: ĠBoolean ĊĠ Ġfun ĠhashCode ( a Ġ: ĠK ) Ġ: ĠInteger Ċ } Ċ Ċ class ĠDefault Hash ing Strategy < in ĠK Ġ: ĠI Hash able > Ġ: ĠI Hash ing Strategy < K > Ġ{ ĊĠ Ġoverride Ġfun Ġequals ( a Ġ: ĠK , Ġb Ġ: ĠK ) Ġ: ĠBoolean Ġ= Ġa . equals ( b ) ĊĠ Ġoverride Ġfun ĠhashCode ( a Ġ: ĠK ) Ġ: ĠInteger Ġ= Ġa . hashCode Ċ } Ċ Ċ class ĠJava Object Hash ing Strategy < K > Ġ: ĠI Hash ing Strategy < K > Ġ{ ĊĠ Ġoverride Ġfun Ġequals ( a Ġ: ĠK , Ġb Ġ: ĠK ) Ġ: ĠBoolean ĊĠĠĠ Ġ= Ġa . hash able (). equals ( b ) ĊĠ Ġoverride Ġfun ĠhashCode ( a Ġ: ĠK ) Ġ: ĠInteger ĊĠĠĠ Ġ= Ġa . hash able (). hashCode Ċ } Ċ Ċ class ĠHashMap < K , ĠV > Ġ: ĠI Map < K , ĠV > Ġ{ ĊĠ Ġprivate Ġ[ inline ] Ġfun ĠhashCode ( a Ġ: ĠK ) Ġ= Ġa . hash able (). hashCode ĊĠ Ġprivate Ġ[ inline ] Ġfun Ġequals ( a Ġ: ĠK , Ġb Ġ: ĠK ) Ġ= Ġa . hash able () Ġ== Ġb ĊĊĠ Ġ// Ġeverything Ġelse Ġuses Ġthese Ġequals () Ġand ĠhashCode () ... ĠĊ Ċ } Ċ Ċ class ĠStrategy HashMap < K , ĠV >( hash ing Strategy Ġ: ĠI Hash ing Strategy < K >) Ġ: ĠI Map < K , ĠV > Ġ{ ĊĊĊĠ Ġ// Ġwhere Ġ!( K Ġ: ĠI Hash able ) ĊĠ Ġ// this () Ġ: Ġthis ( Java Object Hash ing Strategy < K >()) Ġ{} ĊĊĠ Ġ// this () Ġwhere Ġ( K Ġ: ĠI Hash able ) Ġ: Ġthis ( Default Hash ing Strategy < K >()) Ġ{} ĊĠ Ġ// ... Ċ Ċ }