Avatar billede crockie Nybegynder
25. maj 2009 - 14:35 Der er 10 kommentarer

Java Vector sortering

Hej,
Er der en nem måde at sortere en vector på. Min vector indeholder værdier ala:
1;5;14;
2;4;12;

Jeg kunne godt tænke mig at få værdierne adskilte og over i en ny vector eller streng til sammenligningsformål.
Avatar billede arne_v Ekspert
25. maj 2009 - 14:56 #1
Hvis det er en java.util.Vector du har så kan du bruge Collections.sort metoden.
Avatar billede mcb2001 Nybegynder
25. maj 2009 - 14:58 #2
Hvorfor ikke bruge:
java.util.ArrayList - dette er den klasse der tilbage i version 1.4.2 overtog for Vector.

Og ja, du skal definere dine objekter som "Comparable" og så bruge Collections.sort metoden...
Avatar billede crockie Nybegynder
25. maj 2009 - 15:25 #3
Jeg har brugt Collections.frequency til at prøve at optælle f.eks. hvor mange "1" forekommer. Men får kun resultater tilbage hvor "1" er alene f.eks.
1;
Hvis dataene er f.eks.:
1;5;7
bliver det ikke talt med, og hvis datane er 1;4;11; giver det også problemer, derfor ser jeg det nemmeste hvis datane i en anden vector/arraylist f.eks. er:
[1]
[5]
[11]
Så er det lidt nemmere at sammenligne (eller hva)?
Avatar billede arne_v Ekspert
25. maj 2009 - 15:28 #4
Har du en vektor af vektorer og dermed brug for en ArrayList<ArrayList<Integer>> ?
Avatar billede arne_v Ekspert
25. maj 2009 - 15:30 #5
ArrayList erstatted Vector allerede i 1.2 tilbage i 1998. Men problemstillingen er den samme.
Avatar billede mcb2001 Nybegynder
25. maj 2009 - 15:45 #6
Okay, 2 eksempler:

1. Du har en række af lottotal, hvor der altid bliver udtrukket 7 tal, og du kan derfor lave et objekt "lottotal" der indeholder 7 INT, og som implementerer "comparable" og derfor kan sammenlignes med en anden lotto trækning.

2. Du har en række måle punkter, hvor der idag kan være 3 målepunkter men imorgen kan være 5.
Her kan du oprette et objekt "målepunkter" som indeholder en ArrayList<Integer> og implementerer "comparable" således at du f.eks. kan sammenligne element for element i to objekter.

Gav det en ide om hvordan du kan løse problemet?

Alle dine Objekter kan du så ligge i en ArrayList<OBJEKTTYPE> og bruge Collections.sort() metoden... :-)
Avatar billede crockie Nybegynder
26. maj 2009 - 09:05 #7
Tak for de hurtige svar.
Jeg kan nok finde ud af at sortere og sammenligne, men problemet ligger i, at organisere dataene på en måde så de er sammenlignelige fra databasen hvor de ser således ud:
1;4;11;
2;7;10;
1;
1;6;
osv.
Collections.sort sorterer dem vel bare alfabetisk, jeg vil gerne optælle med f.eks. Collections.frequency. Men jeg kører Collections.frequency(vector,"1"); på ovenstående, får jeg 1, og det skulle jo være 3, men så snart der er andet data bagved, går det galt. Jeg har også prøvet contains, men så ryger "11" også med i optællingen.
Avatar billede mcb2001 Nybegynder
26. maj 2009 - 13:43 #8
hvorfor kan du ikke ligge talene ind som:
1, 4, 11, 2, 7, 10, 1, 1, 6 ?
hvad bruger du relationen mellem dem til?
Avatar billede crockie Nybegynder
28. maj 2009 - 09:26 #9
tallene refererer til et id i en anden tabel, og er kædet sammen med et cpr-nr, men antallet af værdier kan svinge fra 1-3.
Men jeg har fået det løst med nogle irriterende IF-sætninger. Ikke optimalt, men det virker ok.
Det jeg fra starten skulle have gjort var nok, at skrive værdierne som 2-cifrede, alstå ala; 01;05;11; osv. Så havde det været nemmere at undgå dubletter.
Avatar billede mcb2001 Nybegynder
29. maj 2009 - 09:39 #10
eller bruge en relations tabel imellem...

Sådan at databasen blev bygget som:

Bruger: idA, navn, adresse, osv...

Mellemlag:idA, idB

Knyttet-til: id, cpr nr., osv...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester