Avatar billede dark_sun Nybegynder
23. januar 2003 - 11:56 Der er 7 kommentarer og
1 løsning

Sortering af en ArrayListe

Hejsa, jeg er lige begyndt på at bruge Java, og er derfor ikke helt stiv i det. Det problem jeg har er nok kommet op en del gange før, men her er det. Jeg har en arrayListe, og i den er har jeg lagt 3 string´s. Dem vil jeg gerne sortere, så de kommer i alfabetisk-orden. Når jeg adder dem til min liste kunne de, ser den sådan ud:
list.add(new Filmen("James bond","DvD","Action"));. Håber at der er en der kan hjælpe mig :-)
Avatar billede arne_v Ekspert
23. januar 2003 - 12:04 #1
Eksempel:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SortArrayList {
    public static void main(String[] args) {
        List lst = new ArrayList();
        lst.add("CCC");
        lst.add("BB");
        lst.add("A");
        for(int i = 0; i < lst.size(); i++) {
            System.out.println((String)lst.get(i));
        }
        Collections.sort(lst);
        for(int i = 0; i < lst.size(); i++) {
            System.out.println((String)lst.get(i));
        }
    }
}
Avatar billede arne_v Ekspert
23. januar 2003 - 12:14 #2
Eller måske snarere:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortArrayListComplex {
    public static void main(String[] args) {
        List lst = new ArrayList();
        lst.add(new Data("CCC","1"));
        lst.add(new Data("BB", "2"));
        lst.add(new Data("A", "3"));
        for(int i = 0; i < lst.size(); i++) {
            System.out.println((Data)lst.get(i));
        }
        Collections.sort(lst, new Cmp());
        for(int i = 0; i < lst.size(); i++) {
            System.out.println((Data)lst.get(i));
        }
    }
}

class Data {
    private String v1;
    private String v2;
    public Data(String v1, String v2) {
        this.v1 = v1;
        this.v2 = v2;
    }
    public String toString() {
        return (v1 + " " + v2);
    }
    public String getV1() {
        return v1;
    }
    public String getV2() {
        return v2;
    }

}
   
class Cmp implements Comparator {
    public int compare(Object o1, Object o2) {
        return ((Data)o1).getV1().compareTo(((Data)o2).getV1());
    }
    public boolean equals(Object obj)  {
        return false;
    }
}
Avatar billede arne_v Ekspert
23. januar 2003 - 12:15 #3
Data klassen svarer til din Filmen klasse.

Og du skal selv lave noget der kan stå for sammenligningen.

Så kan du bruge den indbyggede sort.
Avatar billede gybel Nybegynder
23. januar 2003 - 12:17 #4
Du skal anvende en comparator til at sammenligne dine selv defineret objekter.
Det er et interface som skal implementeres og har metoden compareTo(Object obj).
Avatar billede gybel Nybegynder
23. januar 2003 - 12:21 #5
Vrøvl.. hehe
Comparator har en metode der hedder compare(Object o1, Object o2)
det er Comparable der har metoden compareTo(Obejct obj)
Brug den frem gangs måde Arne har lavet med klassen cmp.
Avatar billede sbglasius Nybegynder
23. januar 2003 - 13:49 #6
Hejsa

Lad din Filmen klasse implementere java.lang.Comparable

og implementer din compareTo(Object obj) ca. sådan:

public int compareTo(Object obj) {

  return filmnavn.compareTo(((Filmen)obj).getFilmNavn());

}
Avatar billede sbglasius Nybegynder
23. januar 2003 - 13:52 #7
ups... fortsættelse:

det antages, at filmnavn er af typen String og er en membervariabel i Filmen, samt at der findes en getFilmnavn i Filmen som returnere filmnavn.

Benyt Collections.sort(lst);

da lst nu indeholder Filmen som implementere Comparable jf. javadoc til Collections.sort:

public static void sort(List list)

Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface. Furthermore, all elements in the list must be mutually comparable (that is, e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the list).



God fornøjelse.

/Søren
Avatar billede dark_sun Nybegynder
23. januar 2003 - 16:28 #8
Tak skal i have, for de svar jeg har fået. Det er meget nice at der kommer et svar så hurtigt på mit sprøgsmål. Det her er helt klart et sted jeg vil bruge fremover, hvis jeg har et sprøgsmål om Java. :-)
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