package Ġcom . hs uan party . basic _ app . utils . implement _ data _ structure Ċ Ċ /** Ċ Ġ* ĠAuthor : ĠTs ung ĠH s uan , ĠL ai Ċ Ġ* ĠCreated Ġon : Ġ 2 0 1 9 / 1 1 / 2 9 Ċ Ġ* ĠDescription : Ċ Ġ*/ Ċ class ĠMy HashMap < K , ĠV > Ġ{ ĊĠĠĠ Ġinner Ġclass ĠEntry < K , ĠV >( key : ĠK , Ġvalue : ĠV , Ġnext : ĠEntry < K , ĠV > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey : ĠK Ġ= Ġkey ĊĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġvar Ġnext : ĠEntry < K , ĠV >? Ġ= Ġnext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINITIAL _ CAP ACITY Ġ= Ġ 1 6 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor (): Ġthis ( INITIAL _ CAP ACITY ) ĊĊĠĠĠ Ġconstructor ( capacity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . capacity Ġ= Ġcapacity ĊĊĠĠĠĠĠĠĠ Ġbuckets Ġ= ĠArray < Entry < K , ĠV >? >( 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcapacity Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġbuckets : ĠArray < Entry < K , ĠV > ?> ĊĠĠĠ Ġvar Ġsize Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġput ( key : ĠK , Ġvalue : ĠV ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbucket Ġ= Ġkey . hashCode () Ġ% Ġcapacity ĊĠĠĠĠĠĠĠ Ġvar Ġentry Ġ= Ġbuckets [ bucket ] ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( entry Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . key ?. equals ( key ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Ġ= Ġentry . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Entry Ġ= ĠEntry ( key , Ġvalue , Ġnull ) ĊĠĠĠĠĠĠĠ Ġnew Entry . next Ġ= Ġbuckets [ bucket ] ĊĠĠĠĠĠĠĠ Ġbuckets [ bucket ] Ġ= Ġnew Entry ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ( key : ĠK ): ĠV ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbucket Ġ= Ġkey . hashCode () Ġ% Ġcapacity ĊĠĠĠĠĠĠĠ Ġvar Ġentry Ġ= Ġbuckets [ bucket ] ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( entry Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . key ?. equals ( key ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġentry . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Ġ= Ġentry . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcontains ( key : ĠK ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbucket Ġ= Ġkey . hashCode () Ġ% Ġcapacity ĊĠĠĠĠĠĠĠ Ġreturn Ġbuckets [ bucket ] Ġ!= Ġnull ĊĠĠĠ Ġ} Ċ }