package Ġchapter 0 1 Ċ Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ çĮ « çĭ Ĺ éĺŁåĪĹ Ċ Ġ* Ġ å®ŀçİ° ä¸Ģç§į çĭ Ĺ çĮ « éĺŁåĪĹ çļĦ ç»ĵæŀĦ ï¼Į è¦ģæ±Ĥ å¦Ĥä¸ĭ ï¼ļ Ċ Ġ* Ġ- ĠçĶ¨æĪ· åı¯ä»¥ è°ĥçĶ¨ Ġadd Ġæĸ¹æ³ķ å°Ĩ Ġcat Ġ ç±» æĪĸ Ġdog Ġ ç±»çļĦ å®ŀä¾ĭ æĶ¾ åħ¥ éĺŁåĪĹ ä¸Ń ï¼Ľ Ċ Ġ* Ġ- ĠçĶ¨æĪ· åı¯ä»¥ è°ĥçĶ¨ Ġpoll All Ġæĸ¹æ³ķ ï¼Į å°Ĩ éĺŁåĪĹ ä¸Ń æīĢæľīçļĦ å®ŀä¾ĭ æĮīçħ§ è¿Ľ éĺŁåĪĹ çļĦ åħĪ åĲİ é¡ºåºı ä¾Ŀ æ¬¡ å¼¹ åĩº ï¼Ľ Ċ Ġ* Ġ- ĠçĶ¨æĪ· åı¯ä»¥ è°ĥçĶ¨ Ġpoll Dog Ġæĸ¹æ³ķ ï¼Į å°Ĩ éĺŁåĪĹ ä¸Ń Ġdog Ġ ç±»çļĦ å®ŀä¾ĭ æĮīçħ§ è¿Ľ éĺŁåĪĹ çļĦ åħĪ åĲİ é¡ºåºı ä¾Ŀ æ¬¡ å¼¹ åĩº ï¼Ľ Ċ Ġ* Ġ- ĠçĶ¨æĪ· åı¯ä»¥ è°ĥçĶ¨ Ġpoll Cat Ġæĸ¹æ³ķ ï¼Į å°Ĩ éĺŁåĪĹ ä¸Ń Ġcat Ġ ç±»çļĦ å®ŀä¾ĭ æĮīçħ§ è¿Ľ éĺŁåĪĹ çļĦ åħĪ åĲİ é¡ºåºı ä¾Ŀ æ¬¡ å¼¹ åĩº ï¼Ľ Ċ Ġ* Ġ- ĠçĶ¨æĪ· åı¯ä»¥ è°ĥçĶ¨ ĠisEmpty Ġæĸ¹æ³ķ ï¼Į æ£ĢæŁ¥ éĺŁåĪĹ ä¸Ń æĺ¯åĲ¦ è¿ĺæľī Ġdog ĠæĪĸ Ġcat ĠçļĦ å®ŀä¾ĭ ï¼Ľ Ċ Ġ* Ġ- ĠçĶ¨æĪ· åı¯ä»¥ è°ĥçĶ¨ Ġis Dog Empty Ġæĸ¹æ³ķ ï¼Į æ£ĢæŁ¥ éĺŁåĪĹ ä¸Ń æĺ¯åĲ¦ æľī Ġdog Ġ ç±»çļĦ å®ŀä¾ĭ ï¼Ľ Ċ Ġ* Ġ- ĠçĶ¨æĪ· åı¯ä»¥ è°ĥçĶ¨ Ġis Cat Empty Ġæĸ¹æ³ķ ï¼Į æ£ĢæŁ¥ éĺŁåĪĹ ä¸Ń æĺ¯åĲ¦ æľī Ġcat Ġ ç±»çļĦ å®ŀä¾ĭ ãĢĤ Ċ Ġ*/ Ċ Ċ open Ġclass ĠPet ( val Ġtype : ĠString ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtype ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠDog Ġ: ĠPet (" dog ") Ċ Ċ class ĠCat Ġ: ĠPet (" cat ") Ċ Ċ class ĠCat Dog Queue Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcat Idx Queue Ġ= ĠLinkedList < Int >() ĊĠĠĠ Ġprivate Ġval Ġdog Idx Queue Ġ= ĠLinkedList < Int >() ĊĠĠĠ Ġprivate Ġval Ġidx Pet Map Ġ= ĠHashMap < Int , ĠPet >() ĊĠĠĠ Ġprivate Ġvar Ġidx Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġadd ( p : ĠPet ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( isEmpty ()) Ġidx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhen Ġ( p ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCat Ġ-> Ġcat Idx Queue . add ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDog Ġ-> Ġdog Idx Queue . add ( idx ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġidx Pet Map [ idx ] Ġ= Ġp ĊĠĠĠĠĠĠĠ Ġidx ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpoll All (): ĠPet ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcat Idx Ġ= Ġcat Idx Queue . peek () ĊĠĠĠĠĠĠĠ Ġval Ġdog Idx Ġ= Ġdog Idx Queue . peek () ĊĠĠĠĠĠĠĠ Ġif Ġ( dog Idx Ġ!= Ġnull Ġ&& Ġ( cat Idx Ġ== Ġnull Ġ|| Ġcat Idx Ġ> Ġdog Idx )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdog Idx Queue . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġidx Pet Map [ dog Idx ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cat Idx Ġ!= Ġnull Ġ&& Ġ( dog Idx Ġ== Ġnull Ġ|| Ġdog Idx Ġ> Ġcat Idx )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcat Idx Queue . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġidx Pet Map [ cat Idx ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpoll Dog (): ĠDog Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdog Idx Ġ= Ġdog Idx Queue . pop () ĊĠĠĠĠĠĠĠ Ġreturn Ġidx Pet Map [ dog Idx ] Ġas ĠDog ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpoll Cat (): ĠCat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcat Idx Ġ= Ġcat Idx Queue . pop () ĊĠĠĠĠĠĠĠ Ġreturn Ġidx Pet Map [ cat Idx ] Ġas ĠCat ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcat Idx Queue . isEmpty () Ġ&& Ġdog Idx Queue . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Dog Empty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdog Idx Queue . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Cat Empty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcat Idx Queue . isEmpty () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġqueue Ġ= ĠCat Dog Queue () ĊĠĠĠ Ġqueue . add ( Cat ()) ĊĠĠĠ Ġqueue . add ( Dog ()) ĊĠĠĠ Ġqueue . add ( Cat ()) ĊĠĠĠ Ġqueue . add ( Dog ()) ĊĠĠĠ Ġqueue . add ( Cat ()) ĊĠĠĠ Ġqueue . add ( Cat ()) ĊĠĠĠ Ġprintln ( queue . poll Cat ()) ĊĠĠĠ Ġprintln (" ---- ") ĊĠĠĠ Ġprintln ( queue . poll Dog ()) ĊĠĠĠ Ġprintln ( queue . poll Dog ()) ĊĠĠĠ Ġprintln (" ---- ") ĊĠĠĠ Ġqueue . add ( Dog ()) ĊĠĠĠ Ġqueue . add ( Cat ()) ĊĠĠĠ Ġwhile Ġ(! queue . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġqueue . poll All () ĊĠĠĠĠĠĠĠ Ġprintln ( p ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġqueue . add ( Dog ()) ĊĠĠĠ Ġqueue . add ( Cat ()) ĊĠĠĠ Ġwhile Ġ(! queue . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġqueue . poll All () ĊĠĠĠĠĠĠĠ Ġprintln ( p ) ĊĠĠĠ Ġ} Ċ }