web-dev-qa-db-fra.com

Comment trouver la valeur minimale dans une ArrayList, ainsi que le numéro d'index? (Java)

Je dois obtenir la valeur d'index de la valeur minimale dans mon répertoire en Java. MON arraylist a plusieurs flottants, et j'essaie de penser à un moyen d'obtenir le numéro d'index du plus petit flottant afin de pouvoir utiliser ce numéro ailleurs dans mon code. Je suis débutant, alors ne me déteste pas s'il te plaît. Merci!

51
user2130496

Vous pouvez utiliser Collections.min et List.indexOf :

int minIndex = list.indexOf(Collections.min(list));

Si vous souhaitez parcourir la liste une seule fois (les éléments ci-dessus peuvent la parcourir deux fois):

public static <T extends Comparable<T>> int findMinIndex(final List<T> xs) {
    int minIndex;
    if (xs.isEmpty()) {
        minIndex = -1;
    } else {
        final ListIterator<T> itr = xs.listIterator();
        T min = itr.next(); // first element as the current minimum
        minIndex = itr.previousIndex();
        while (itr.hasNext()) {
            final T curr = itr.next();
            if (curr.compareTo(min) < 0) {
                min = curr;
                minIndex = itr.previousIndex();
            }
        }
    }
    return minIndex;
}
90
Marimuthu Madasamy

Cela devrait le faire en utilisant des fonctions intégrées.

public static int minIndex (ArrayList<Float> list) {
  return list.indexOf (Collections.min(list)); }
13
GoZoner

essaye ça:

public int getIndexOfMin(List<Float> data) {
    float min = Float.MAX_VALUE;
    int index = -1;
    for (int i = 0; i < data.size(); i++) {
        Float f = data.get(i);
        if (Float.compare(f.floatValue(), min) < 0) {
            min = f.floatValue();
            index = i;
        }
    }
    return index;
}
9
BlackJoker

Il existe un moyen plus simple de rechercher un entier min dans la liste de tableaux:

int min = array.get(0);
        for (int i : array){
            min = min < i ? min : i;
        }
6
Baurzhan Kozhaev

Voici ce que je fais. Je trouve le minimum en premier, puis après avoir trouvé le minimum, il est supprimé de ArrayList.

ArrayList<Integer> a = new ArrayList<>();
a.add(3);
a.add(6);
a.add(2);
a.add(5);

while (a.size() > 0) {
    int min = 1000;
    for (int b:a) {
        if (b < min)
            min = b;
    }
    System.out.println("minimum: " + min);
    System.out.println("index of min: " + a.indexOf((Integer) min));
    a.remove((Integer) min);
}
0