package Ġdesign Ċ Ċ import Ġjava . util . Random Ċ Ċ class ĠRandom ized Set () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdata Map Ġ= Ġmutable Map Of < Int , ĠInt >() ĊĠĠĠ Ġprivate Ġval Ġdata Array Ġ= Ġmutable ListOf < Int >() ĊĠĠĠ Ġprivate Ġval Ġrnd Ġ= ĠRandom () ĊĊĠĠĠ Ġfun Ġinsert (` val `: ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(` val ` Ġin Ġdata Map ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġdata Array . add (` val `) ĊĠĠĠĠĠĠĠ Ġdata Map [` val `] Ġ= Ġdata Array . last Index ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove (` val `: ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(` val ` Ġ! in Ġdata Map ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġdata Map [` val `] !! ĊĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġdata Array . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Array [ index ] Ġ= Ġdata Array . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Map [ data Array [ index ]] Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdata Map . remove (` val `) ĊĠĠĠĠĠĠĠ Ġdata Array . remove At ( data Array . last Index ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetRandom () Ġ= Ġdata Array [ rnd . nextInt ( data Array . size )] Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġrandom ized Set Ġ= ĠRandom ized Set () ĊĠĠĠ Ġprintln ( random ized Set . insert ( 1 )) // ĠInser ts Ġ 1 Ġto Ġthe Ġset . ĠReturns Ġtrue Ġas Ġ 1 Ġwas Ġinserted Ġsuccessfully . ĊĠĠĠ Ġprintln ( random ized Set . remove ( 2 )) Ġ// ĠReturns Ġfalse Ġas Ġ 2 Ġdoes Ġnot Ġexist Ġin Ġthe Ġset . ĊĠĠĠ Ġprintln ( random ized Set . insert ( 2 )) Ġ// ĠInser ts Ġ 2 Ġto Ġthe Ġset , Ġreturns Ġtrue . ĠSet Ġnow Ġcontains Ġ[ 1 , 2 ]. ĊĠĠĠ Ġprintln ( random ized Set . getRandom ()) Ġ// ĠgetRandom () Ġshould Ġreturn Ġeither Ġ 1 Ġor Ġ 2 Ġrandomly . ĊĠĠĠ Ġprintln ( random ized Set . remove ( 1 )) Ġ// ĠRemoves Ġ 1 Ġfrom Ġthe Ġset , Ġreturns Ġtrue . ĠSet Ġnow Ġcontains Ġ[ 2 ]. ĊĠĠĠ Ġprintln ( random ized Set . insert ( 2 )) Ġ// Ġ 2 Ġwas Ġalready Ġin Ġthe Ġset , Ġso Ġreturn Ġfalse . ĊĠĠĠ Ġprintln ( random ized Set . getRandom ()) Ġ// ĠSince Ġ 2 Ġis Ġthe Ġonly Ġnumber Ġin Ġthe Ġset , ĠgetRandom () Ġwill Ġalways Ġreturn Ġ 2 . Ċ } Ċ