Va innbär programmring? Collctions och annat nyttigt En stor l av tin så sättr man ihop olika algoritmr och atastrktrr så att fnkar för st t aktlla problmt. Förhoppningsvis så ägnar man också n hl l ti åt att fnra t hr man ska sätta ihop m så att programmt blir lätt att nrhålla Typiska atastrktrr Uppgift: Vän på n txtsträng, vs blir Arrayr Listor Mängr ash tabllr Stackar Mn om man ska ha å?
Collction Framwork Stanarproblm som lösts många gångr Listor Snrra ignom obkt antra mängr Arrayr Känna ign or ashtabllr som Nyckl - vär bhövr Sortring Stackar tökas Gnrlla implmntationr som kan använas på många ställn St Collction - gnrll mäng m sakr a, clar, mpty, qals, contains St - n mäng List - n orna mäng Itratorr - för att travrsra mängn pblic class Dmo pblic static voi main( String[] args ) throws IOExcption String linin; ashst hs = nw ashst(); BffrRar br = nw BffrRar( nw InptStramRar( Systm.in ) ); Systm.ot.print("> "); linin = br.ralin(); ashst - snabbt, oornat StringToknizr st = nw StringToknizr(linIn); String str; LinkashSt - långsammar, ornat whil( st.hasmortokns() ) str = st.nxttokn(); if( hs.contains( str ) ) Systm.ot.println( str + " - Fanns ran" ); ls hs.a( str ); Systm.ot.println( str + " - Lagt till" );
Använningsområ // Kolla va som finns i stt Itrator it = hs.itrator(); whil( it.hasnxt() ) Systm.ot.println( it.nxt() ); Alla lägn är ag bhövr hålla koll på: att man int använr n sak flr än n gång att systm har tt visst lsystm installrat tc Listor pblic class Dmo pblic static voi main( String[] args ) throws IOExcption <snipp> ArrayList list = nw ArrayList(); whil( st.hasmortokns() ) list.a( st.nxttokn() ); Itrator it = list.itrator(); whil( it.hasnxt() ) Systm.ot.print( it.nxt() + " "); Vctor - gammal klass ArrayList - lista implmntra mha array list.a(1,"xxxx"); list.a(3,"xxxx"); int antal = list.siz(); for( int i = 0 ; i < antal ; i++) Systm.ot.print( list.gt(i) + " " ); LinkList - länka lista list.st(1,"zzzz"); list.st(3,"zzzz"); list.rmov(antal-1); list.rmov(1);
Använningsområ Övrallt är man bhövr bhålla orningn på sakr Sortra mängr Elmntn har tt förhållan till varanra istorilista i n wbläsar Comparabl En bostaskö <0 - (a < b) tc 0 - (a = b) ArrayList llr LinkList pblic class Dmo pblic static voi main( String[] args ) throws IOExcption TrSt ts = nw TrSt(); <snipp> StringToknizr st = nw StringToknizr(br.raLin()); String str; whil( st.hasmortokns() ) str = st.nxttokn(); if( ts.contains( str ) ) Systm.ot.println( str + " - Fanns ran" ); ls ts.a( str ); Systm.ot.println( str + " - Lagt till" ); Itrator it = ts.itrator(); whil( it.hasnxt() ) Systm.ot.println( it.nxt() ); n kommr nästan samma ko som för ashst tstt mn n använs TrSt >0 - (a > b) ashst TrSt använs för ko kommr mn n nästan samma som tstt pblic class Prson privat String first, last; privat transint int somval = 0; pblic Prson( this.first this.last somval String first, String last, int x ) = first; = last; = x; pblic String tostring() rtrn first + " " + last + " " + somval; Vilkn orning ska vara i?
pblic class Prson implmnts Comparabl privat String first, last; privat transint int somval = 0; pblic Prson( this.first this.last somval String first, String last, int x ) = first; = last; = x; TrSt ts = nw TrSt(); boolan mmy; mmy mmy mmy mmy = = = = ts.a( ts.a( ts.a( ts.a( nw nw nw nw Prson("Kall","Anka",12) ); Prson("Tatt","Anka",36) ); Prson("Fnatt","Anka",11) ); Prson("Knatt","Anka",9) ); pblic int comparto( Obct o ) Prson p = (Prson) o; int rslt = last.comparto(p.last); if( rslt == 0 ) rslt = first.comparto(p.first); if( rslt == 0 ) rslt = somval - p.somval; rtrn rslt; - ava Dmo Fnatt Anka 11 Kall Anka 12 Knatt Anka 9 Tatt Anka 36 pblic String tostring() rtrn first + " " + last + " " + somval; pblic int comparto( Obct o ) Prson p = (Prson) o; int rslt = somval - p.somval; if( rslt == 0 ) rslt = last.comparto(p.last); if( rslt == 0 ) rslt = first.comparto(p.first); rtrn rslt; - ava Dmo Knatt Anka 9 Fnatt Anka 11 Kall Anka 12 Tatt Anka 36 Använningsområ Övrallt är information måst ligga i n viss orning Arssbok Artikllista tc
Maps pblic class Dmo pblic static voi main( String[] args ) TrMap tm = nw TrMap(); Obct mmy; mmy = tm.pt("orföran", nw Prson("Joakim","von Anka",112)); mmy = tm.pt("kassör", nw Prson("Alxanr","Lcas",43)); mmy = tm.pt("skrtrar", nw Prson("Kasa","Anka",44)); St kys Itrator it = tm.kyst(); = kys.itrator(); Obct kyval; Nyckl - vär par whil( it.hasnxt() ) kyval = it.nxt(); Systm.ot.println( "(" + kyval + "," + tm.gt(kyval) + ")" ); Myckt myckt använbart TrMap tm = nw TrMap( nw Comparator() privat int translat( String s ) if( s.qals("orföran") ) rtrn 1; ls if ( s.qals("kassör") ) rtrn 2; ls if ( s.qals("skrtrar") ) rtrn 3; ls rtrn 99; pblic int compar( Obct o1, Obct o2 ) rtrn translat( (String)o1 ) - translat( (String)o2 ); ); - ava Dmo (Kassör,Alxanr Lcas 43) (Orföran,Joakim von Anka 112) (Skrtrar,Kasa Anka 44) Använningsområ Många, myckt använbar Enkla atabasr Lagra inställningar tc - ava Dmo (Orföran,Joakim von Anka 112) (Kassör,Alxanr Lcas 43) (Skrtrar,Kasa Anka 44)
Älr klassr Bygga viar ashtabl Proprtis Om t int passar : skapa n gn Vctor Collctions (obs int Collction) Stack Olika vanliga oprationr BitSt Uppgift: Vän på n txtsträng, vs blir Obsrvr - Obsrvabl Ska ssa känna av om nåt har hänt Mn om man ska ha å? Ska n vta om anra obktn?
Obsrvr - Obsrvabl Obsrv har n lista är intrssra klintr lagras Basklass - Obsrvabl Klintrna anmälr sitt intrss Obsrv Klintr Intrfac - Obsrvr Om nåt hänr så signalrar Obsrv alla som finns i listan pblic class IntrsionDtctor xtns Obsrvabl privat Ranom ran = nw Ranom(); pblic class SysAm implmnts Obsrvr privat String nam; pblic voi connct() if( ran.nxtboolan() ) // Intrång stchang(); notifyobsrvrs(); pblic SysAm( String nam, IntrsionDtctor i ) this.nam = nam; i.aobsrvr(this); pblic voi pat( Obsrvabl srvr, Obct rr ) Systm.ot.println( nam + " förhinrar intrång");