package Ġchapter 3 . section 1 Ċ Ċ /** Ċ Ġ* Ġæµ ĭ è¯ķ å¯¹è±¡ æĺ¯åĲ¦ æŃ£ç¡® å®ŀçİ° äºĨ ST æİ¥åı£ Ċ Ġ*/ Ċ fun Ġtest ST ( st : ĠST < Int , ĠString >) Ġ{ ĊĠĠĠ Ġrequire ( st . isEmpty ()) ĊĠĠĠ Ġst . put ( 2 2 2 , Ġ" aaa ") ĊĠĠĠ Ġst . put ( 3 3 3 , Ġ" bbb ") ĊĠĠĠ Ġst . put ( 1 1 1 , Ġ" ccc ") ĊĊĠĠĠ Ġcheck (! st . isEmpty ()) ĊĠĠĠ Ġcheck ( st . size () Ġ== Ġ 3 ) ĊĠĠĠ Ġcheck ( st . contains ( 1 1 1 )) ĊĠĠĠ Ġcheck ( st . get ( 2 2 2 ) Ġ== Ġ" aaa ") ĊĠĠĠ Ġcheck ( st . get ( 1 2 3 ) Ġ== Ġnull ) ĊĊĠĠĠ Ġst . delete ( 2 2 2 ) ĊĠĠĠ Ġcheck ( st . size () Ġ== Ġ 2 ) ĊĠĠĠ Ġcheck ( st . get ( 2 2 2 ) Ġ== Ġnull ) ĊĊĠĠĠ Ġst . put ( 4 4 4 , Ġ" ddd ") ĊĠĠĠ Ġst . put ( 1 1 1 , Ġ" eee ") ĊĠĠĠ Ġcheck ( st . get ( 1 1 1 ) Ġ== Ġ" eee ") ĊĠĠĠ Ġcheck ( st . size () Ġ== Ġ 3 ) ĊĊĠĠĠ Ġval Ġkeys Ġ= Ġst . keys () ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠ Ġkeys . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 1 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( st . get ( it ) Ġ== Ġ" eee ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 3 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( st . get ( it ) Ġ== Ġ" bbb ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 4 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( st . get ( it ) Ġ== Ġ" ddd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Check Ġfailed .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcheck ( count Ġ== Ġ 3 ) ĊĊĠĠĠ Ġst . delete ( 1 1 1 ) ĊĠĠĠ Ġst . delete ( 3 3 3 ) ĊĠĠĠ Ġst . delete ( 4 4 4 ) ĊĠĠĠ Ġcheck ( st . isEmpty ()) ĊĊĠĠĠ Ġprintln (" ST Ġcheck Ġsucceed .") Ċ } Ċ Ċ /** Ċ Ġ* Ġæµ ĭ è¯ķ å¯¹è±¡ æĺ¯åĲ¦ æŃ£ç¡® å®ŀçİ° äºĨ Ordered ST æİ¥åı£ Ċ Ġ* Ġä¼ļ åħĪ è°ĥçĶ¨ test ST æĸ¹æ³ķ æµĭè¯ķ ST æİ¥åı£ ï¼Į æµĭè¯ķ æĪĲåĬŁ åĲİ ä¸į éĩįå¤į æµĭè¯ķ ST æİ¥åı£ Ċ Ġ*/ Ċ fun Ġtest Ordered ST ( ordered ST : ĠOrdered ST < Int , ĠString >) Ġ{ ĊĠĠĠ Ġtest ST ( ordered ST ) ĊĠĠĠ Ġrequire ( ordered ST . isEmpty ()) ĊĠĠĠ Ġordered ST . put ( 2 2 2 , Ġ" aaa ") ĊĠĠĠ Ġordered ST . put ( 3 3 3 , Ġ" bbb ") ĊĠĠĠ Ġordered ST . put ( 1 1 1 , Ġ" ccc ") ĊĊĠĠĠ Ġcheck ( ordered ST . min () Ġ== Ġ 1 1 1 ) ĊĠĠĠ Ġcheck ( ordered ST . max () Ġ== Ġ 3 3 3 ) ĊĊĠĠĠ Ġcheck ( ordered ST . floor ( 1 2 3 ) Ġ== Ġ 1 1 1 ) ĊĠĠĠ Ġcheck ( ordered ST . floor ( 2 2 2 ) Ġ== Ġ 2 2 2 ) ĊĠĠĠ Ġcheck ( ordered ST . floor ( 5 5 5 ) Ġ== Ġ 3 3 3 ) ĊĠĠĠ Ġneed To Throw Specified Exception < NoSuch ElementException > Ġ{ Ġordered ST . floor ( 1 0 0 ) Ġ} ĊĊĠĠĠ Ġcheck ( ordered ST . ce iling ( 1 2 3 ) Ġ== Ġ 2 2 2 ) ĊĠĠĠ Ġcheck ( ordered ST . ce iling ( 2 2 2 ) Ġ== Ġ 2 2 2 ) ĊĠĠĠ Ġcheck ( ordered ST . ce iling ( 1 0 0 ) Ġ== Ġ 1 1 1 ) ĊĠĠĠ Ġneed To Throw Specified Exception < NoSuch ElementException > Ġ{ Ġordered ST . ce iling ( 5 5 5 ) Ġ} ĊĊĠĠĠ Ġcheck ( ordered ST . rank ( 1 0 0 ) Ġ== Ġ 0 ) ĊĠĠĠ Ġcheck ( ordered ST . rank ( 1 1 1 ) Ġ== Ġ 0 ) ĊĠĠĠ Ġcheck ( ordered ST . rank ( 1 2 3 ) Ġ== Ġ 1 ) ĊĠĠĠ Ġcheck ( ordered ST . rank ( 3 3 3 ) Ġ== Ġ 2 ) ĊĠĠĠ Ġcheck ( ordered ST . rank ( 5 5 5 ) Ġ== Ġ 3 ) ĊĊĠĠĠ Ġcheck ( ordered ST . select ( 0 ) Ġ== Ġ 1 1 1 ) ĊĠĠĠ Ġcheck ( ordered ST . select ( 2 ) Ġ== Ġ 3 3 3 ) ĊĠĠĠ Ġneed To Throw Specified Exception < NoSuch ElementException > Ġ{ Ġordered ST . select ( 3 ) Ġ} ĊĊĠĠĠ Ġordered ST . delete Min () ĊĠĠĠ Ġcheck ( ordered ST . size () Ġ== Ġ 2 ) ĊĠĠĠ Ġcheck ( ordered ST . get ( 1 1 1 ) Ġ== Ġnull ) ĊĊĠĠĠ Ġordered ST . delete Max () ĊĠĠĠ Ġcheck ( ordered ST . size () Ġ== Ġ 1 ) ĊĠĠĠ Ġcheck ( ordered ST . get ( 3 3 3 ) Ġ== Ġnull ) ĊĊĠĠĠ Ġordered ST . put ( 4 4 4 , Ġ" ddd ") ĊĠĠĠ Ġordered ST . put ( 5 5 5 , Ġ" eee ") ĊĠĠĠ Ġcheck ( ordered ST . size () Ġ== Ġ 3 ) ĊĠĠĠ Ġcheck ( ordered ST . max () Ġ== Ġ 5 5 5 ) ĊĠĠĠ Ġcheck ( ordered ST . min () Ġ== Ġ 2 2 2 ) ĊĊĠĠĠ Ġcheck ( ordered ST . size ( 1 0 0 , Ġ 6 0 0 ) Ġ== Ġ 3 ) ĊĠĠĠ Ġcheck ( ordered ST . size ( 2 2 2 , Ġ 4 4 4 ) Ġ== Ġ 2 ) ĊĠĠĠ Ġcheck ( ordered ST . size ( 2 2 2 , Ġ 2 3 4 ) Ġ== Ġ 1 ) ĊĠĠĠ Ġcheck ( ordered ST . size ( 3 3 3 , Ġ 2 2 2 ) Ġ== Ġ 0 ) ĊĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠ Ġordered ST . keys ( 2 0 0 , Ġ 5 0 0 ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( it Ġ== Ġ 2 2 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( it Ġ== Ġ 4 4 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Check Ġfailed .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcheck ( count Ġ== Ġ 2 ) ĊĊĠĠĠ Ġordered ST . delete Max () ĊĠĠĠ Ġordered ST . delete Min () ĊĠĠĠ Ġordered ST . delete Max () ĊĠĠĠ Ġcheck ( ordered ST . isEmpty ()) ĊĊĠĠĠ Ġprintln (" Ordered ST Ġcheck Ġsucceed .") Ċ } Ċ Ċ /** Ċ Ġ* Ġaction è¡¨è¾¾å¼ı éľĢè¦ģ æĬĽ åĩº æĮĩå®ļ å¼Ĥå¸¸ ï¼Į å¦Ĥæŀľ æ²¡ æĬĽ åĩº å¼Ĥå¸¸ æĪĸ æĬĽ åĩº åħ¶ä»ĸ å¼Ĥå¸¸ ï¼Į æķ´ä¸ª åĩ½æķ° åıį èĢĮ ä¼ļ æĬĽ åĩº IllegalStateException Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠException > Ġneed To Throw Specified Exception ( action : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġvar Ġcheck Suc ceed Ġ= Ġfalse ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ Ġ// æ³Ľ åŀĭ T ä¸įèĥ½ çĶ¨ åľ¨ catch åıĤæķ° ä¸Ń ï¼Į åį³ ä½¿çĶ¨ re ified ä¿® é¥ ° ä¹Ł ä¸į è¡Į ĊĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Suc ceed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! check Suc ceed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Check Ġfailed .") ĊĠĠĠ Ġ} Ċ } Ċ