ArrayListe nach kleinsten Wert durchsuchen

Julius

Mitglied
Hi,

ich habe folgendes Konstrukt:

ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();

Werte sind entsprechend gespeichert:
Zeile1: 1. Wert
Zeile1: 2. Wert
Zeile2: 1. Wert
Zeile2: 2. Wert

und so weiter...

Ich würde nun gerne den kleinsten Wert der Liste ermitteln.

Bei einem normalen Array würde ich das so machen:

Code:
	    int [] x = {1, 0, 13, 15}; 
	    int minIndex=0;
	    for (int i=1; i < x.length; i++)
	      if (x[i] < x[minIndex])
	        minIndex = i;

Nur stehe ich gerade auf dem Schlau, was die Liste betrifft.
Kann bitte jemand helfen?
Wenn ich mit size() arbeite, bekomme ich 0 zurück.
Daher weiß ich auch nicht, wie ich das Schleifenende sinnvoll definieren soll.
 

timestamp

Mitglied Käsekuchen
Wenn size() 0 liefer ist deine Liste leer.
Außerdem hast du eine 2 Dimensionale Liste. Ansonsten ist es genauso wie beim Array:
Java:
int size = a.size();
int min = Integer.MAX_VALUE;
for( int i = 0; i < size; i++ ){
  int size2 = a.get(i).size();
  for( int j = 0; j < size2; j++ ){
    if( a.get(i).get(j) < min ){
      min = a.get(i).get(j)M
    }
  }
}
 

j2se

Erfahrenes Mitglied
Wenn size() 0 liefer ist deine Liste leer.

und der Algorithmus liefert min = 2147483647, was ziemlich falsch ist.

Angenommen, der Algorithmus ist in eine Methode verpackt, dann sollte die Methode bei size() == 0 null liefern, falls size()==1 genau den Wert und falls size() > 1 dann wird der ganze Algorithmus ausgeführt und der Wert in min wird geliefert.
 

timestamp

Mitglied Käsekuchen
Dann ist in deiner Liste kein Element.
Führe dohc mal bitte folgende Änderungen an deinem Code aus:
Java:
int size = a.size();
int min = Integer.MAX_VALUE;
System.out.println("Size: "+size);
for( int i = 0; i < size; i++ ){
  System.out.println("Durchlauf i: "+i);
  int size2 = a.get(i).size();
  System.out.println("Size2: "+size2);
  for( int j = 0; j < size2; j++ ){
    System.out.println("Vergleiche: "+a.get(i).get(j)+ " mit " + min);
    if( a.get(i).get(j) < min ){
      min = a.get(i).get(j)M
    }
  }
}

edit: Jetzt habe ich erst gelesen dass es 2 verschiedene Leute geantwortet haben.
@js2e: Es ging darum den kleinsten Wert herauszufinden. Ich bin hier davon ausgegangen dass die Liste auch tatsächlich gefüllt ist. Natürlich muss man solche Fälle auch berücksichtigen, aber sowas überlasse ich auch gerne den Leuten selbst.
 
Zuletzt bearbeitet: