Manche Zahlen und Objekte speichere ich in einer ArrayList. Hier kann man relativ leicht Objekte hinzufügen (.add()
) oder entfernen (.remove()
). In diesem Artikel beschreibe ich, wie man den größten und den kleinsten Wert (Minumum und Maximum) einer ArrayList bestimmt.
Für eine ArrayList<Integer>
Am einfachsten ist die Bestimmung des Minimums und des Maximums bei einer Liste von Objekten mit einer natürlichen Reihenfolge, wie z.B. Integer-Zahlen. In dem Falle kann man die statischen Methoden max()
und min()
der Collections-Klasse verwenden. Je nachdem wie die Liste aufgebaut ist, kann es allerdings auch effizientere Wege geben (siehe Stackoverflow und Zparacha-Blog).
ArrayList<Integer> liste = new ArrayList<Integer>();
liste.add(100);
liste.add(200);
liste.add(110);
liste.add(99);
System.out.println("Maximum: " + Collections.max(liste));
System.out.println("Minimum: " + Collections.min(liste)); |
ArrayList<Integer> liste = new ArrayList<Integer>();
liste.add(100);
liste.add(200);
liste.add(110);
liste.add(99);
System.out.println("Maximum: " + Collections.max(liste));
System.out.println("Minimum: " + Collections.min(liste));
Vollständiges Beispiel:
package de.fenon.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
/**
* Beispiel: Kleinsten und größten Wert in einer ArrayList finden.
* @author fenon.de
*/
public final class HauptProgramm {
/** Zahl der Messungen. */
static final Integer STICHPROBE = 10;
/** Maximalwert. */
static final Integer MAXIMUM = 10;
/** Seed des Zufallszahlen-Generators. */
static final Integer SEED = 1234567891;
/**
* Privater Konstruktor.
* Dadurch kann kein Objekt der Klasse "Hauptprogramm" erzeugt werden.
*/
private HauptProgramm() {}
/**
* main()-Methode.
* @param args - Parameter der Kommandozeile.
*/
public static void main(final String[] args) {
ArrayList<Integer> liste = new ArrayList<Integer>();
// Erzeuge zufällige Messwerte
Random generator = new Random(SEED);
for (int i = 0; i < STICHPROBE; i++) {
liste.add(generator.nextInt(MAXIMUM));
}
// Gib die Messwerte aus
for (Integer element:liste) {
System.out.println(element);
}
// Gib Kleinsten und Größten Wert aus
System.out.println("Maximum: " + Collections.max(liste));
System.out.println("Minimum: " + Collections.min(liste));
} // ENDE: main()
} // ENDE: HauptProgramm |
package de.fenon.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
/**
* Beispiel: Kleinsten und größten Wert in einer ArrayList finden.
* @author fenon.de
*/
public final class HauptProgramm {
/** Zahl der Messungen. */
static final Integer STICHPROBE = 10;
/** Maximalwert. */
static final Integer MAXIMUM = 10;
/** Seed des Zufallszahlen-Generators. */
static final Integer SEED = 1234567891;
/**
* Privater Konstruktor.
* Dadurch kann kein Objekt der Klasse "Hauptprogramm" erzeugt werden.
*/
private HauptProgramm() {}
/**
* main()-Methode.
* @param args - Parameter der Kommandozeile.
*/
public static void main(final String[] args) {
ArrayList<Integer> liste = new ArrayList<Integer>();
// Erzeuge zufällige Messwerte
Random generator = new Random(SEED);
for (int i = 0; i < STICHPROBE; i++) {
liste.add(generator.nextInt(MAXIMUM));
}
// Gib die Messwerte aus
for (Integer element:liste) {
System.out.println(element);
}
// Gib Kleinsten und Größten Wert aus
System.out.println("Maximum: " + Collections.max(liste));
System.out.println("Minimum: " + Collections.min(liste));
} // ENDE: main()
} // ENDE: HauptProgramm
Für eine ArrayList mit komplexeren Objekten
Man kann allerdings auch den minimalen und maximalen Wert eigener/komplexerer Objekte bestimmen. Im folgenden Beispiel habe ich eine Liste von Objekten des eigenen Typs Website
. Mit Hilfe eines Comparators (hier: VergleicheHits
) kann festgelegt werden, wie die Objekte verglichen werden sollen. Im Beispiel werden die Website-Objekte dann anhand ihrer Zugriffzahlen verglichen.
Klasse: Website
package de.fenon.Website;
/**
* Informationen über Webseite.
* @author fenon.de
*/
public class Website {
/** Zahl der Besucher der Website. */
private Integer hits;
/**
* Konstruktor.
* @param besuche - Zahl der Besucher.
*/
public Website(final Integer besuche) {
this.setHits(besuche);
} // ENDE: Konstruktor
/**
* Gibt die Besucherzahl der Webseite aus.
* @return Zahl der Besucher der Website.
*/
public final Integer getHits() {
return hits;
} // ENDE: getHits()
/**
* Setze die Besucherzahl der Webseite.
* @param besuche - Zahl der Besucher.
*/
public final void setHits(final Integer besuche) {
this.hits = besuche;
} // ENDE: setHits()
} // ENDE: Website |
package de.fenon.Website;
/**
* Informationen über Webseite.
* @author fenon.de
*/
public class Website {
/** Zahl der Besucher der Website. */
private Integer hits;
/**
* Konstruktor.
* @param besuche - Zahl der Besucher.
*/
public Website(final Integer besuche) {
this.setHits(besuche);
} // ENDE: Konstruktor
/**
* Gibt die Besucherzahl der Webseite aus.
* @return Zahl der Besucher der Website.
*/
public final Integer getHits() {
return hits;
} // ENDE: getHits()
/**
* Setze die Besucherzahl der Webseite.
* @param besuche - Zahl der Besucher.
*/
public final void setHits(final Integer besuche) {
this.hits = besuche;
} // ENDE: setHits()
} // ENDE: Website
Comparator: VergleicheHits
package de.fenon.Website;
import java.util.Comparator;
/**
* Vergleiche Website-Objekte anhand ihrer Hits.
* @author fenon.de
*/
public class VergleicheHits implements Comparator<Website> {
/** Konstruktor. */
public VergleicheHits() {}
@Override
public final int compare(final Website a, final Website b) {
if (a.getHits() < b.getHits()) {
return -1;
} else if (a.getHits().equals(b.getHits())) {
return 0;
} else {
return 1;
}
} // ENDE: compare()
} // ENDE: VergleicheHits |
package de.fenon.Website;
import java.util.Comparator;
/**
* Vergleiche Website-Objekte anhand ihrer Hits.
* @author fenon.de
*/
public class VergleicheHits implements Comparator<Website> {
/** Konstruktor. */
public VergleicheHits() {}
@Override
public final int compare(final Website a, final Website b) {
if (a.getHits() < b.getHits()) {
return -1;
} else if (a.getHits().equals(b.getHits())) {
return 0;
} else {
return 1;
}
} // ENDE: compare()
} // ENDE: VergleicheHits
Das Beispiel
package de.fenon.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import de.fenon.Website.VergleicheHits;
import de.fenon.Website.Website;
/**
* Beispiel: Kleinsten und größten Wert in einer Liste finden.
* @author fenon.de
*/
public final class HauptProgramm {
/** Zahl der Messungen. */
static final Integer STICHPROBE = 10;
/** Maximalwert. */
static final Integer MAXIMUM = 10;
/** Seed des Zufallszahlen-Generators. */
static final Integer SEED = 1234567891;
/**
* Privater Konstruktor.
* Dadurch kann kein Objekt der Klasse "Hauptprogramm" erzeugt werden.
*/
private HauptProgramm() {}
/**
* main()-Methode.
* @param args - Parameter der Kommandozeile.
*/
public static void main(final String[] args) {
ArrayList<Website> seiten = new ArrayList<Website>();
// Erzeuge zufällige Messwerte
Random generator = new Random(SEED);
for (int i = 0; i < STICHPROBE; i++) {
seiten.add(new Website(generator.nextInt(MAXIMUM)));
}
// Gib die Messwerte aus
for (Website element:seiten) {
System.out.println("Hits: " + element.getHits());
}
// Gib Kleinsten und Größten Wert aus.
// Mit einem anderen Getter könnte man z.B. den Namen der Website ausgeben.
System.out.println(
"Maximum: "
+ Collections.max(seiten, new VergleicheHits()).getHits()
);
System.out.println(
"Minimum: "
+ Collections.min(seiten, new VergleicheHits()).getHits()
);
} // ENDE: main()
} // ENDE: HauptProgramm |
package de.fenon.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import de.fenon.Website.VergleicheHits;
import de.fenon.Website.Website;
/**
* Beispiel: Kleinsten und größten Wert in einer Liste finden.
* @author fenon.de
*/
public final class HauptProgramm {
/** Zahl der Messungen. */
static final Integer STICHPROBE = 10;
/** Maximalwert. */
static final Integer MAXIMUM = 10;
/** Seed des Zufallszahlen-Generators. */
static final Integer SEED = 1234567891;
/**
* Privater Konstruktor.
* Dadurch kann kein Objekt der Klasse "Hauptprogramm" erzeugt werden.
*/
private HauptProgramm() {}
/**
* main()-Methode.
* @param args - Parameter der Kommandozeile.
*/
public static void main(final String[] args) {
ArrayList<Website> seiten = new ArrayList<Website>();
// Erzeuge zufällige Messwerte
Random generator = new Random(SEED);
for (int i = 0; i < STICHPROBE; i++) {
seiten.add(new Website(generator.nextInt(MAXIMUM)));
}
// Gib die Messwerte aus
for (Website element:seiten) {
System.out.println("Hits: " + element.getHits());
}
// Gib Kleinsten und Größten Wert aus.
// Mit einem anderen Getter könnte man z.B. den Namen der Website ausgeben.
System.out.println(
"Maximum: "
+ Collections.max(seiten, new VergleicheHits()).getHits()
);
System.out.println(
"Minimum: "
+ Collections.min(seiten, new VergleicheHits()).getHits()
);
} // ENDE: main()
} // ENDE: HauptProgramm