66

我需要在 Java 中的数组列表中获取最小值的索引值。我的arraylist 包含几个浮点数,我正在想办法获得最小浮点数的索引号,这样我就可以在代码的其他地方使用该索引号。我是初学者,所以请不要讨厌我。谢谢!

4

8 回答 8

110

您可以使用Collections.minList.indexOf

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

如果只想遍历列表一次(上面可能会遍历两次):

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;
}
于 2013-04-14T03:34:44.397 回答
13

这应该使用内置函数来完成。

public static int minIndex (ArrayList<Float> list) {
  return list.indexOf (Collections.min(list)); }
于 2013-04-14T03:37:34.147 回答
9

尝试这个:

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;
}
于 2013-04-14T03:33:44.500 回答
7

有一种更简单的方法可以在数组列表中找到最小整数:

int min = array.get(0);
        for (int i : array){
            min = min < i ? min : i;
        }
于 2016-01-25T05:35:25.073 回答
4
public static int minIndex (ArrayList<Float> list) {
  return list.indexOf (Collections.min(list));
 }
System.out.println("Min = " + list.get(minIndex(list));
于 2021-01-20T11:55:03.957 回答
0
  1. 用浮点数声明一个数组列表。

  2. Collection.min()- 查找列表中的最小元素。

  3. List.indexOf()- 找到最小元素的索引。

public class Test {

    public static void main(String[] args) {

        ArrayList<Float> ary = new ArrayList<Float>();
        ary.add((float) 3.0);
        ary.add((float) 6);
        ary.add((float) 2);
        ary.add((float) 1.3);
        ary.add((float) 4.2);
        int indx = minIndex(a);
        System.out.println(indx);
    }

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

}
于 2022-02-01T05:42:43.490 回答
-1

您必须遍历整个数组并保留两个辅助值:

  • 你找到的最小值(在你接近终点的路上)
  • 找到最小值的位置的索引

假设您的数组名为myArray。在此代码的末尾minIndex具有最小值的索引。

var min = Number.MAX_VALUE; //the largest number possible in JavaScript
var minIndex = -1;

for (int i=0; i<myArray.length; i++){
   if (myArray[i] < min){
      min = myArray[i];
      minIndex = i;
   }
}

这是假设最坏的情况:一个完全随机的数组。这是一个 O(n) 算法或n 阶算法,这意味着如果您的数组中有n 个元素,那么您必须在知道答案之前查看所有元素。O(n) 算法是最糟糕的,因为它们需要大量时间来解决问题。

如果您的数组已排序或具有任何其他特定结构,则可以优化算法以更快。

话虽如此,除非您有一个包含数千个值的庞大数组,否则不要担心优化,因为 O(n) 算法和更快的算法之间的差异不会很明显。

于 2013-04-14T03:50:29.537 回答
-1

这就是我所做的。我首先找到最小值,然后在找到最小值之后,将其从 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);
}
于 2019-05-09T05:07:44.723 回答