package Ġkotlin Ċ Ċ import Ġjava . io . Serializable Ċ import Ġjava . util .* Ċ Ċ private Ġobject ĠEmpty Iterator Ġ: ĠList Iterator < Nothing > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġfun Ġhas Previous (): ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġfun Ġnext Index (): ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun Ġprevious Index (): ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġoverride Ġfun Ġnext (): ĠNothing Ġ= Ġthrow ĠNoSuch ElementException () ĊĠĠĠ Ġoverride Ġfun Ġprevious (): ĠNothing Ġ= Ġthrow ĠNoSuch ElementException () Ċ } Ċ Ċ private Ġobject ĠEmpty List Ġ: ĠList < Nothing >, ĠSerializable Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġother Ġis ĠList < *> Ġ&& Ġother . isEmpty () ĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" []" ĊĊĠĠĠ Ġoverride Ġfun Ġsize (): ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġfun Ġcontains ( o : ĠAny ?): ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġfun Ġcontains All ( c : ĠCollection < Any ?> ): ĠBoolean Ġ= Ġc . isEmpty () ĊĊĠĠĠ Ġoverride Ġfun Ġget ( index : ĠInt ): ĠNothing Ġ= Ġthrow ĠIndex OutOfBoundsException (" Index Ġ$ index Ġis Ġout Ġof Ġbound Ġof Ġempty Ġlist .") ĊĠĠĠ Ġoverride Ġfun ĠindexOf ( o : ĠAny ?): ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġoverride Ġfun Ġlast IndexOf ( o : ĠAny ?): ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Nothing > Ġ= ĠEmpty Iterator ĊĠĠĠ Ġoverride Ġfun Ġlist Iterator (): ĠList Iterator < Nothing > Ġ= ĠEmpty Iterator ĊĠĠĠ Ġoverride Ġfun Ġlist Iterator ( index : ĠInt ): ĠList Iterator < Nothing > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġ 0 ) Ġthrow ĠIndex OutOfBoundsException (" Index : Ġ$ index ") ĊĠĠĠĠĠĠĠ Ġreturn ĠEmpty Iterator ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsub List ( from Index : ĠInt , Ġto Index : ĠInt ): ĠList < Nothing > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( from Index Ġ== Ġ 0 Ġ&& Ġto Index Ġ== Ġ 0 ) Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException (" from Index : Ġ$ from Index , Ġto Index : Ġ$ to Index ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Resolve (): ĠAny Ġ= ĠEmpty List Ċ } Ċ Ċ private Ġobject ĠEmpty Set Ġ: ĠSet < Nothing >, ĠSerializable Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġother Ġis ĠSet < *> Ġ&& Ġother . isEmpty () ĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" []" ĊĊĠĠĠ Ġoverride Ġfun Ġsize (): ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġfun Ġcontains ( o : ĠAny ?): ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġfun Ġcontains All ( c : ĠCollection < Any ?> ): ĠBoolean Ġ= Ġc . isEmpty () ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Nothing > Ġ= ĠEmpty Iterator ĊĊĠĠĠ Ġprivate Ġfun Ġread Resolve (): ĠAny Ġ= ĠEmpty Set Ċ } Ċ Ċ /** ĠReturns Ġan Ġempty Ġread - only Ġlist . Ġ ĠThe Ġreturned Ġlist Ġis Ġserial izable Ġ( JVM ). Ġ*/ Ċ public Ġfun Ġempty List < T > (): ĠList < T > Ġ= ĠEmpty List Ċ /** ĠReturns Ġan Ġempty Ġread - only Ġset . Ġ ĠThe Ġreturned Ġset Ġis Ġserial izable Ġ( JVM ). Ġ*/ Ċ public Ġfun Ġempty Set < T > (): ĠSet < T > Ġ= ĠEmpty Set Ċ Ċ /** ĠReturns Ġa Ġnew Ġread - only Ġlist Ġof Ġgiven Ġelements . Ġ ĠThe Ġreturned Ġlist Ġis Ġserial izable Ġ( JVM ). Ġ*/ Ċ public Ġfun ĠlistOf < T >( var arg Ġvalues : ĠT ): ĠList < T > Ġ= Ġif Ġ( values . size () Ġ> Ġ 0 ) Ġarray ListOf (* values ) Ġelse Ġempty List () Ċ Ċ /** ĠReturns Ġan Ġempty Ġread - only Ġlist . Ġ ĠThe Ġreturned Ġlist Ġis Ġserial izable Ġ( JVM ). Ġ*/ Ċ public Ġfun ĠlistOf < T > (): ĠList < T > Ġ= Ġempty List () Ċ Ċ /** ĠReturns Ġa Ġnew Ġread - only Ġordered Ġset Ġwith Ġthe Ġgiven Ġelements . Ġ ĠThe Ġreturned Ġset Ġis Ġserial izable Ġ( JVM ). Ġ*/ Ċ public Ġfun Ġset Of < T >( var arg Ġvalues : ĠT ): ĠSet < T > Ġ= Ġif Ġ( values . size () Ġ> Ġ 0 ) Ġvalues . toSet () Ġelse Ġempty Set () Ċ Ċ /** ĠReturns Ġan Ġempty Ġread - only Ġset . Ġ ĠThe Ġreturned Ġset Ġis Ġserial izable Ġ( JVM ). Ġ*/ Ċ public Ġfun Ġset Of < T > (): ĠSet < T > Ġ= Ġempty Set () Ċ Ċ /** ĠReturns Ġa Ġnew Ġ[ LinkedList ] Ġwith Ġthe Ġgiven Ġelements . Ġ*/ Ċ public Ġfun Ġlink edList Of < T >( var arg Ġvalues : ĠT ): ĠLinkedList < T > Ġ= Ġvalues . to Collection ( LinkedList < T >()) Ċ Ċ /** ĠReturns Ġa Ġnew Ġ[ ArrayList ] Ġwith Ġthe Ġgiven Ġelements . Ġ*/ Ċ public Ġfun Ġarray ListOf < T >( var arg Ġvalues : ĠT ): ĠArrayList < T > Ġ= Ġvalues . to Collection ( ArrayList ( values . size ())) Ċ Ċ /** ĠReturns Ġa Ġnew Ġ[ HashSet ] Ġwith Ġthe Ġgiven Ġelements . Ġ*/ Ċ public Ġfun Ġhash Set Of < T >( var arg Ġvalues : ĠT ): ĠHashSet < T > Ġ= Ġvalues . to Collection ( HashSet ( map Capacity ( values . size ()))) Ċ Ċ /** ĠReturns Ġa Ġnew Ġ[ Linked HashSet ] Ġwith Ġthe Ġgiven Ġelements . Ġ*/ Ċ public Ġfun Ġlinked Set Of < T >( var arg Ġvalues : ĠT ): ĠLinked HashSet < T > Ġ= Ġvalues . to Collection ( Linked HashSet ( map Capacity ( values . size ()))) Ċ Ċ /** ĠReturns Ġa Ġnew Ġread - only Ġlist Ġeither Ġof Ġsingle Ġgiven Ġelement , Ġif Ġit Ġis Ġnot Ġnull , Ġor Ġempty Ġlist Ġit Ġthe Ġelement Ġis Ġnull . ĠThe Ġreturned Ġlist Ġis Ġserial izable Ġ( JVM ). Ġ*/ Ċ public Ġfun Ġ< T Ġ: ĠAny > ĠlistOf NotNull ( value : ĠT ?): ĠList < T > Ġ= Ġif Ġ( value Ġ!= Ġnull ) ĠlistOf ( value ) Ġelse Ġempty List () Ċ Ċ /** ĠReturns Ġa Ġnew Ġread - only Ġlist Ġonly Ġof Ġthose Ġgiven Ġelements , Ġthat Ġare Ġnot Ġnull . Ġ ĠThe Ġreturned Ġlist Ġis Ġserial izable Ġ( JVM ). Ġ*/ Ċ public Ġfun Ġ< T Ġ: ĠAny > ĠlistOf NotNull ( var arg Ġvalues : ĠT ?): ĠList < T > Ġ= Ġvalues . filter NotNull () Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġ[ Int Range ] Ġof Ġthe Ġvalid Ġindices Ġfor Ġthis Ġcollection . Ċ Ġ*/ Ċ public Ġval ĠCollection <* >. indices : ĠInt Range ĊĠĠĠ Ġget () Ġ= Ġ 0 .. size () Ġ- Ġ 1 Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġ[ Int Range ] Ġthat Ġstarts Ġwith Ġzero Ġand Ġends Ġat Ġthe Ġvalue Ġof Ġthis Ġnumber Ġbut Ġdoes Ġnot Ġinclude Ġit . Ċ Ġ*/ Ċ deprecated (" Use Ġ 0 .. n - 1 Ġrange Ġinstead .", ĠReplace With (" 0 .. this Ġ- Ġ 1 ")) Ċ public Ġval ĠInt . indices : ĠInt Range ĊĠĠĠ Ġget () Ġ= Ġ 0 .. this Ġ- Ġ 1 Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġindex Ġof Ġthe Ġlast Ġitem Ġin Ġthe Ġlist Ġor Ġ- 1 Ġif Ġthe Ġlist Ġis Ġempty . Ċ Ġ* Ċ Ġ* Ġ@ sample Ġtest . collections . List Specific Test . last Index Ċ Ġ*/ Ċ public Ġval Ġ< T > ĠList < T >. last Index : ĠInt ĊĠĠĠ Ġget () Ġ= Ġthis . size () Ġ- Ġ 1 Ċ Ċ /** ĠReturns Ġ` true ` Ġif Ġthe Ġcollection Ġis Ġnot Ġempty . Ġ*/ Ċ public Ġfun Ġ< T > ĠCollection < T >. isNotEmpty (): ĠBoolean Ġ= Ġ! isEmpty () Ċ Ċ /** ĠReturns Ġthis ĠCollection Ġif Ġit 's Ġnot Ġ` null ` Ġand Ġthe Ġempty Ġlist Ġotherwise . Ġ*/ Ċ public Ġfun Ġ< T > ĠCollection < T > ?. or Empty (): ĠCollection < T > Ġ= Ġthis Ġ?: Ġempty List () Ċ Ċ /** ĠReturns Ġthis ĠList Ġif Ġit 's Ġnot Ġ` null ` Ġand Ġthe Ġempty Ġlist Ġotherwise . Ġ*/ Ċ public Ġfun Ġ< T > ĠList < T > ?. or Empty (): ĠList < T > Ġ= Ġthis Ġ?: Ġempty List () Ċ Ċ /** ĠReturns Ġthis ĠSet Ġif Ġit 's Ġnot Ġ` null ` Ġand Ġthe Ġempty Ġset Ġotherwise . Ġ*/ Ċ public Ġfun Ġ< T > ĠSet < T > ?. or Empty (): ĠSet < T > Ġ= Ġthis Ġ?: Ġempty Set () Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġsize Ġof Ġthis Ġiterable Ġif Ġit Ġis Ġknown , Ġor Ġ` null ` Ġotherwise . Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠIterable < T >. collection Size OrNull (): ĠInt ? Ġ= Ġif Ġ( this Ġis ĠCollection <* >) Ġsize () Ġelse Ġnull Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġsize Ġof Ġthis Ġiterable Ġif Ġit Ġis Ġknown , Ġor Ġthe Ġspecified Ġ[ default ] Ġvalue Ġotherwise . Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠIterable < T >. collection Size OrDefault ( default : ĠInt ): ĠInt Ġ= Ġif Ġ( this Ġis ĠCollection <* >) Ġsize () Ġelse Ġdefault Ċ Ċ /** ĠReturns Ġtrue Ġwhen Ġit 's Ġsafe Ġto Ġconvert Ġthis Ġcollection Ġto Ġa Ġset Ġwithout Ġchanging Ġcontains Ġmethod Ġbehavior . Ġ*/ Ċ private Ġfun Ġ< T > ĠCollection < T >. safe To ConvertTo Set () Ġ= Ġsize () Ġ> Ġ 2 Ġ&& Ġthis Ġis ĠArrayList Ċ Ċ /** ĠConverts Ġthis Ġcollection Ġto Ġa Ġset , Ġwhen Ġit 's Ġworth Ġso Ġand Ġit Ġdoesn 't Ġchange Ġcontains Ġmethod Ġbehavior . Ġ*/ Ċ private Ġfun Ġ< T > ĠIterable < T >. convertTo Set For Set Operation With ( source : ĠIterable < T >): ĠCollection < T > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSet Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCollection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġis ĠCollection Ġ&& Ġsource . size () Ġ< Ġ 2 Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( this . safe To ConvertTo Set ()) Ġto HashSet () Ġelse Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġto HashSet () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ /** ĠConverts Ġthis Ġcollection Ġto Ġa Ġset , Ġwhen Ġit 's Ġworth Ġso Ġand Ġit Ġdoesn 't Ġchange Ġcontains Ġmethod Ġbehavior . Ġ*/ Ċ private Ġfun Ġ< T > ĠIterable < T >. convertTo Set For Set Operation (): ĠCollection < T > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSet Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCollection Ġ-> Ġif Ġ( this . safe To ConvertTo Set ()) Ġto HashSet () Ġelse Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġto HashSet () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ /** Ċ Ġ* ĠS ear ches Ġthis Ġlist Ġor Ġits Ġrange Ġfor Ġthe Ġprovided Ġ[ element ] Ġindex Ġusing Ġbinary Ġsearch Ġalgorithm . Ċ Ġ* ĠThe Ġlist Ġis Ġexpected Ġto Ġbe Ġsorted Ġinto Ġascending Ġorder Ġaccording Ġto Ġthe ĠComparable Ġnatural Ġordering Ġof Ġits Ġelements . Ċ Ġ* Ċ Ġ* ĠIf Ġthe Ġlist Ġcontains Ġmultiple Ġelements Ġequal Ġto Ġthe Ġspecified Ġobject , Ġthere Ġis Ġno Ġguarantee Ġwhich Ġone Ġwill Ġbe Ġfound . Ċ Ġ*/ Ċ public Ġfun Ġ< T : ĠComparable < T >> ĠList < T ?> . binary Search ( element : ĠT ?, Ġfrom Index : ĠInt Ġ= Ġ 0 , Ġto Index : ĠInt Ġ= Ġsize ()): ĠInt Ġ{ ĊĠĠĠ Ġrange Check ( size (), Ġfrom Index , Ġto Index ) ĊĊĠĠĠ Ġvar Ġlow Ġ= Ġfrom Index ĊĠĠĠ Ġvar Ġhigh Ġ= Ġto Index Ġ- Ġ 1 ĊĊĠĠĠ Ġwhile Ġ( low Ġ<= Ġhigh ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmid Ġ= Ġ( low Ġ+ Ġhigh ). ush r ( 1 ) Ġ// Ġsafe Ġfrom Ġoverflow s ĊĠĠĠĠĠĠĠ Ġval Ġmid Val Ġ= Ġget ( mid ) ĊĠĠĠĠĠĠĠ Ġval Ġcmp Ġ= Ġcompare Values ( mid Val , Ġelement ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cmp Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlow Ġ= Ġmid Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( cmp Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Ġ= Ġmid Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmid Ġ// Ġkey Ġfound ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ-( low Ġ+ Ġ 1 ) Ġ Ġ// Ġkey Ġnot Ġfound Ċ } Ċ Ċ /** Ċ Ġ* ĠS ear ches Ġthis Ġlist Ġor Ġits Ġrange Ġfor Ġthe Ġprovided Ġ[ element ] Ġindex Ġusing Ġbinary Ġsearch Ġalgorithm . Ċ Ġ* ĠThe Ġlist Ġis Ġexpected Ġto Ġbe Ġsorted Ġinto Ġascending Ġorder Ġaccording Ġto Ġthe Ġspecified Ġ[ comparator ]. Ċ Ġ* Ċ Ġ* ĠIf Ġthe Ġlist Ġcontains Ġmultiple Ġelements Ġequal Ġto Ġthe Ġspecified Ġobject , Ġthere Ġis Ġno Ġguarantee Ġwhich Ġone Ġwill Ġbe Ġfound . Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠList < T >. binary Search ( element : ĠT , Ġcomparator : ĠComparator < T >, Ġfrom Index : ĠInt Ġ= Ġ 0 , Ġto Index : ĠInt Ġ= Ġsize ()): ĠInt Ġ{ ĊĠĠĠ Ġrange Check ( size (), Ġfrom Index , Ġto Index ) ĊĊĠĠĠ Ġvar Ġlow Ġ= Ġfrom Index ĊĠĠĠ Ġvar Ġhigh Ġ= Ġto Index Ġ- Ġ 1 ĊĊĠĠĠ Ġwhile Ġ( low Ġ<= Ġhigh ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmid Ġ= Ġ( low Ġ+ Ġhigh ). ush r ( 1 ) Ġ// Ġsafe Ġfrom Ġoverflow s ĊĠĠĠĠĠĠĠ Ġval Ġmid Val Ġ= Ġget ( mid ) ĊĠĠĠĠĠĠĠ Ġval Ġcmp Ġ= Ġcomparator . compare ( mid Val , Ġelement ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cmp Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlow Ġ= Ġmid Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( cmp Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Ġ= Ġmid Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmid Ġ// Ġkey Ġfound ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ-( low Ġ+ Ġ 1 ) Ġ Ġ// Ġkey Ġnot Ġfound Ċ } Ċ Ċ /** Ċ Ġ* ĠS ear ches Ġthis Ġlist Ġor Ġits Ġrange Ġfor Ġan Ġindex Ġof Ġan Ġelement Ġwith Ġthe Ġprovided Ġ[ key ] Ġusing Ġbinary Ġsearch Ġalgorithm . Ċ Ġ* ĠThe Ġlist Ġis Ġexpected Ġto Ġbe Ġsorted Ġinto Ġascending Ġorder Ġaccording Ġto Ġthe ĠComparable Ġnatural Ġordering Ġof Ġkeys Ġof Ġits Ġelements . Ċ Ġ* Ċ Ġ* ĠIf Ġthe Ġlist Ġcontains Ġmultiple Ġelements Ġwith Ġthe Ġspecified Ġ[ key ], Ġthere Ġis Ġno Ġguarantee Ġwhich Ġone Ġwill Ġbe Ġfound . Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< T , ĠK Ġ: ĠComparable < K >> ĠList < T >. binary Search By ( key : ĠK ?, Ġfrom Index : ĠInt Ġ= Ġ 0 , Ġto Index : ĠInt Ġ= Ġsize (), Ġinline Options ( Inline Option . ONLY _ LOCAL _ RETURN ) Ġselector : Ġ( T ) Ġ-> ĠK ?): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġbinary Search ( from Index , Ġto Index ) Ġ{ Ġcompare Values ( selector ( it ), Ġkey ) Ġ} Ċ Ċ // Ġdo Ġnot Ġintroduce Ġthis Ġoverload Ġ--- Ġtoo Ġrare Ċ // public Ġfun Ġ< T , ĠK > ĠList < T >. binary Search By ( key : ĠK , Ġcomparator : ĠComparator < K >, Ġfrom Index : ĠInt Ġ= Ġ 0 , Ġto Index : ĠInt Ġ= Ġsize (), Ġselector : Ġ( T ) Ġ-> ĠK ): ĠInt Ġ= Ċ // ĠĠĠĠĠĠĠ Ġbinary Search ( from Index , Ġto Index ) Ġ{ Ġcomparator . compare ( selector ( it ), Ġkey ) Ġ} Ċ Ċ /** Ċ Ġ* ĠS ear ches Ġthis Ġlist Ġor Ġits Ġrange Ġfor Ġan Ġindex Ġof Ġan Ġelement Ġfor Ġwhich Ġ[ comparison ] Ġfunction Ġreturns Ġzero . Ċ Ġ* ĠThe Ġlist Ġis Ġexpected Ġto Ġbe Ġsorted Ġinto Ġascending Ġorder Ġaccording Ġto Ġthe Ġprovided Ġ[ comparison ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġcomparison Ġfunction Ġthat Ġcomp ares Ġan Ġelement Ġof Ġthe Ġlist Ġwith Ġthe Ġelement Ġbeing Ġsearched . Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠList < T >. binary Search ( from Index : ĠInt Ġ= Ġ 0 , Ġto Index : ĠInt Ġ= Ġsize (), Ġcomparison : Ġ( T ) Ġ-> ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġrange Check ( size (), Ġfrom Index , Ġto Index ) ĊĊĠĠĠ Ġvar Ġlow Ġ= Ġfrom Index ĊĠĠĠ Ġvar Ġhigh Ġ= Ġto Index Ġ- Ġ 1 ĊĊĠĠĠ Ġwhile Ġ( low Ġ<= Ġhigh ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmid Ġ= Ġ( low Ġ+ Ġhigh ). ush r ( 1 ) Ġ// Ġsafe Ġfrom Ġoverflow s ĊĠĠĠĠĠĠĠ Ġval Ġmid Val Ġ= Ġget ( mid ) ĊĠĠĠĠĠĠĠ Ġval Ġcmp Ġ= Ġcomparison ( mid Val ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cmp Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlow Ġ= Ġmid Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( cmp Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Ġ= Ġmid Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmid Ġ// Ġkey Ġfound ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ-( low Ġ+ Ġ 1 ) Ġ Ġ// Ġkey Ġnot Ġfound Ċ } Ċ Ċ /** Ċ Ġ* ĠChecks Ġthat Ġ` from ` Ġand Ġ` to ` Ġare Ġin Ċ Ġ* Ġthe Ġrange Ġof Ġ[ 0 .. size ] Ġand Ġthrows Ġan Ġappropriate Ġexception , Ġif Ġthey Ġaren 't . Ċ Ġ*/ Ċ private Ġfun Ġrange Check ( size : ĠInt , Ġfrom Index : ĠInt , Ġto Index : ĠInt ) Ġ{ ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġfrom Index Ġ> Ġto Index Ġ-> Ġthrow ĠIllegalArgumentException (" from Index Ġ($ from Index ) Ġis Ġgreater Ġthan Ġto Index Ġ($ to Index )") ĊĠĠĠĠĠĠĠ Ġfrom Index Ġ< Ġ 0 Ġ-> Ġthrow ĠIndex OutOfBoundsException (" from Index Ġ($ from Index ) Ġis Ġless Ġthan Ġzero .") ĊĠĠĠĠĠĠĠ Ġto Index Ġ> Ġsize Ġ-> Ġthrow ĠIndex OutOfBoundsException (" to Index Ġ($ to Index ) Ġis Ġgreater Ġthan Ġsize Ġ($ size ). ") ĊĠĠĠ Ġ} Ċ } Ċ