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; } }
Du bør iøvrigt afvise mit første svar, da den metode ikke er velegnet til objekter men kun til simple data typer. Jeg have ikke lige tænkt det hele igennem. Sorry.
Jeg er ret ny mht. java, så hvis i kan fortælle mig, hvad det er der foregår, ville jeg blive meget lykkelig! - Jeg kan sagten bruge jeres svar, men det ville være sjovt at forstå dem også!
Du er jo nødt til at have et kriterie for at kunne sortere.
Det er ikke nemt at sortere hvis ikke man definere hvad der skal sorteres efter. Default sorteres der (vist nok) efter objekternes placering i RAM - ikke særligt brugbart. Derfor skal man selv definere sit kriterie.
Ved simple datatyper (og klasser som implementerer Comparable interfacet - f.eks. String) er det ikke nødvendigt.
Når du har et "komplekst" objekt - altså et objekt med mere end 1 værdi - er du nødt til at forklare eksplicit hvordan der skal sorteres.
Fordi det vil jo næppe give samme rækkefølge ved sortering efter titel art og forfatter.
Synes godt om
Ny brugerNybegynder
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.