Premiär! Fyndchans i SweClockers Månadens Drop
Permalänk

Java, sortera Vector

Jag har en Vector med egna objekt i, och vill sortera dessa på en medlemsvariabel till objektet. Hur ska detta gå till? De exempel jag hittar verkar bara fungera om man har heltal eller strängar.

Klassen ser ut som:

public class Klass { private int frequency; ... public int getFrequency() { ... } }

Visa signatur

System.out.print(madness ? this.is.SPARTA : "");

Permalänk
Medlem

I klassen Collections finns metoden sort som kan ta en vector och en jämförelseklass.

Använd den och skriv din egna jämförelseklass, enkast genom att implementera interfacet "Comparator".

Visa signatur

Confused by earlier errors. Bailing out...
pluggakuten.se - Din läxhjälp på internet

Permalänk

Jag får det att fungera med sorteringen, men problemet är att jag hade min kod baserad på att allt skulle vara osorterat ^^. Detta löste jag dock genom att skapa en kopia av vector, som bara ska användas när man visar statistiken. Det är lite fulkod, men får fungera i projektet.

MEN, vad jag inte förstår är varför den sorterar båda mina Vectors. Någon som vet varför?

Project.java

private static Vector vector = new Vector(); private static Vector sort; ... private static void sortVector() { sort = vector; Collections.sort(sort); }

Letter.java

public int compareTo(Object obj) { Letter l = (Letter) obj; if (l.getFrequency() == this.frequency) { return this.frequency - l.getFrequency(); } return l.getFrequency() - this.frequency; }

Visa signatur

System.out.print(madness ? this.is.SPARTA : "");

Permalänk
Medlem

sort = vector;
Här skapar du ingen kopia, utan säger att sort också skall peka på exakt samma vektor.
Du har alltså bara en vektor.

Permalänk
Medlem

använd vector.clone() för att få en kopia av vektorn

Visa signatur

Confused by earlier errors. Bailing out...
pluggakuten.se - Din läxhjälp på internet

Permalänk

ArrayList ersatte Vector för flera år sedan.

Permalänk
Medlem

Det gäller alla variabler som refererar ett objekt. Om du bara sätter a = b; så koperas som sagt ovan bara referensen. Variabeln i sig är inte objektet, bara ett nummer, typ 34543AB45F eller nåt sånt. Det är därför som man måste köra med comparator för att jämföra och clone för att verkligen skapa en kopia.
Tänk på att cloning av en Vector (eller hellre ArrayList) kan vara kostsam i processorkraft om det är många element i vectorn.

Permalänk
Citat:

Ursprungligen inskrivet av Magellan
Det gäller alla variabler som refererar ett objekt. Om du bara sätter a = b; så koperas som sagt ovan bara referensen. Variabeln i sig är inte objektet, bara ett nummer, typ 34543AB45F eller nåt sånt. Det är därför som man måste köra med comparator för att jämföra och clone för att verkligen skapa en kopia.
Tänk på att cloning av en Vector (eller hellre ArrayList) kan vara kostsam i processorkraft om det är många element i vectorn.

Det är sant, det hade jag faktiskt helt glömt av. Problemet är väl att man inte ser referenser till objekt alls i Java, vilket man lättare ser i C++ med pekare. Hade även för mig att ArrayList och Vector var skilda, där Vector skulle användas för att det ska vara trådsäkert. Hur som helst, det är bara ett enkelt projekt för skolan och prestanda är inga som helst problem nu :>

Tack för hjälpen

Visa signatur

System.out.print(madness ? this.is.SPARTA : "");