Java: sortera objekt i Vector|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
Java: sortera objekt i Vector
squarepusher
Member
Medlem
Forum Posts: 2154
Member Since:
May 29, 2001
sp_UserOfflineSmall Offline
1
January 6, 2005 - 7:20 pm
sp_Permalink sp_Print

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

fet_loa
Kommer du hit ofta?
Medlem
Forum Posts: 1332
Member Since:
September 11, 2002
sp_UserOfflineSmall Offline
817606
January 8, 2005 - 5:48 pm
sp_Permalink sp_Print

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 🙂

squarepusher
Member
Medlem
Forum Posts: 2154
Member Since:
May 29, 2001
sp_UserOfflineSmall Offline
818654
January 9, 2005 - 6:42 pm
sp_Permalink sp_Print

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?

fet_loa
Kommer du hit ofta?
Medlem
Forum Posts: 1332
Member Since:
September 11, 2002
sp_UserOfflineSmall Offline
818973
January 9, 2005 - 11:35 pm
sp_Permalink sp_Print

det kan du göra med en enkel for loop.

for(int i=0; i det kan tyckas omständigt att flytta saker fram o tillbaka såhär men det blir faktiskt inte så dramatiskt tidskrävande som man tror. att flytta alla objekt kostar n tid och att sortera kostar som jag sa innan n*log(n) tid. tillsammans blir det n + n*log(n) + n => O(n*log(N))
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 wink
detta sista var onödig överkurs iofs men det kommer vara bra att ha koll på i framtiden

fet_loa
Kommer du hit ofta?
Medlem
Forum Posts: 1332
Member Since:
September 11, 2002
sp_UserOfflineSmall Offline
818984
January 9, 2005 - 11:52 pm
sp_Permalink sp_Print

glöm inte att tömma originalvektorn innan du sätter tillbaka objekten. finns en clear metod i Vector.

squarepusher
Member
Medlem
Forum Posts: 2154
Member Since:
May 29, 2001
sp_UserOfflineSmall Offline
820949
January 12, 2005 - 5:09 pm
sp_Permalink sp_Print

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 🙂

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 1030
Currently Online:
Guest(s) 61
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL