May 29, 2001
Hej
Nu ger jag upp, har försökt att läsa mig till det men hajjar inte, så jag skulle vara mycket tacksam för tips.
Har en vector där jag lägger in object som heter service, dom objekten har bla en atttribut av typen String som heter name, det är namnet som identifierar ett service objekt, nu är det så att jag måste sortera dom i bokstavs ordning, hur fasen löser jag det utan att behöva knåpa ihop en råkrånglig algoritm? Är det min vector eller objekten som måste implementera interface comparable och finns det någon metod som jag kan anropa som sköter sorteringen då?
/Daniel
September 11, 2002
Det bästa du kan göra om du vill lära dig är faktiskt att knåpa ihop en "råkrånglig" algoritm själv. det finns jättemånga att välja på, olika svåra att implementera beroende på krav på tidskomplexitet. Det är faktiskt inte så svårt när man väl satt igång och det är mycket bra träning. men om du verkligen inte orkar så finns det knep.
De flesta datastrukturer har en eller flera metoder för att extrahera objekten till en annan datastruktur som ofta är enkel att sortera. i Vector finns en metod, toArray(), som precis som det låter ger dig en representation av innehållet av din Vector i en vanlig array, dock fortfarande helt osorterad. en array kan man enkelt sortera precis som man vill med metoden sort() i java.util.Arrays. använd den sort metod som har en array och en comparator som inparameter. sen implementerar du comparator´n precis som du vill att metoden ska sortera och sortera. sen är det bara att sätta tillbaka objekten i din Vector. för att detta ska funka MÅSTE objekten som ska sorteras implementera comparable dvs ha metoden compareTo() som jämför objektens name attribut.
det är nästan onödigt att inte använda Arrays.sort när man sorterar arrayer då den är implementerad på bästa möjliga sätt (i detta fall mergesort och ger en tidskomplexitet på n*log(n) ) men det är väldigt nyttigt att skriva sina egna sorteringsalgoritmer, o ganska roligt 🙂
May 29, 2001
fet_loa wrote: Det bästa du kan göra om du vill lära dig är faktiskt att knåpa ihop en "råkrånglig" algoritm själv. det finns jättemånga att välja på, olika svåra att implementera beroende på krav på tidskomplexitet. Det är faktiskt inte så svårt när man väl satt igång och det är mycket bra träning. men om du verkligen inte orkar så finns det knep.
De flesta datastrukturer har en eller flera metoder för att extrahera objekten till en annan datastruktur som ofta är enkel att sortera. i Vector finns en metod, toArray(), som precis som det låter ger dig en representation av innehållet av din Vector i en vanlig array, dock fortfarande helt osorterad. en array kan man enkelt sortera precis som man vill med metoden sort() i java.util.Arrays. använd den sort metod som har en array och en comparator som inparameter. sen implementerar du comparator´n precis som du vill att metoden ska sortera och sortera. sen är det bara att sätta tillbaka objekten i din Vector. för att detta ska funka MÅSTE objekten som ska sorteras implementera comparable dvs ha metoden compareTo() som jämför objektens name attribut.
det är nästan onödigt att inte använda Arrays.sort när man sorterar arrayer då den är implementerad på bästa möjliga sätt (i detta fall mergesort och ger en tidskomplexitet på n*log(n) ) men det är väldigt nyttigt att skriva sina egna sorteringsalgoritmer, o ganska roligt 🙂
Tack för hjälpen!! Jag ligger inte på det stadiet där jag kan slänga ihop en egen sorterings algoritm inom rimlig tid, ska redovisa mitt arbete snart så det börjar att dra ihop sig, men jag ska testa metoderna som du talade om, gissar att man får koda en metod som flytta data från den sorterade array'en till den ursprungliga vectorn, eller finns det något färdig för det med? arraycopy kanske fungerar?
September 11, 2002
det kan du göra med en enkel for loop.
for(int i=0; i
Alltså blir din algoritms tidskomplexitet begränsad av sorteringen vilket är precis vad man kan hoppas. Om man räknar exakt tidsåtgång o inte tillväxthastighet finns det bättre sätt att sortera direkt i vectorn men det blir nog jobbigare och inte värt mödan, förutom om man är väldigt kräsen eller i utbildningssyfte
detta sista var onödig överkurs iofs men det kommer vara bra att ha koll på i framtiden
May 29, 2001
fet_loa wrote: glöm inte att tömma originalvektorn innan du sätter tillbaka objekten. finns en clear metod i Vector.
Jag tog och använde mig av set() så slapp jag tömma orginal vector utan bara skrev över objekten i sorterad ordning.
Jag är skyldig dig ett stort tack!! för nu fungerar allt klockrent, mycket tack vare dina tips 🙂
1 Guest(s)