1

我已经看到了许多有关查找最小索引的问题。这个相关问题有一个解决方案,它使用 2 个内置函数,min然后indexOf. 这种方法的问题在于它会遍历整个列表两次。是否有最小/最大索引的单个内置函数?

4

2 回答 2

1

这是该问题的一般解决方案以及一个简短的示例。

它只迭代列表一次并返回最小项的索引和最小项本身。如果最小的项目在列表中有一个或多个相等的项目,则它被实现为返回第一个索引和项目。

您可以根据ListMin<T>需要调整不可变类并调整代码以找到最大值。

public class ListMin<T> {

    final int index;
    final T item;

    public ListMin(int index, T item) {
        this.index = index;
        this.item = item;
    }

    public static <E extends Comparable<E>> ListMin<E> getListMin(List<E> list) {
        if (list.size() == 0) {
            // throw exception, do what you want.
        }
        ListIterator<E> it = list.listIterator();
        int minIndex = 0;
        E minItem = it.next(); // first is minimum
        while (it.hasNext()) {
            E item = it.next();
            if (item.compareTo(minItem) < 0) {
                minItem = item;
                minIndex = it.previousIndex();
            }
        }
        return new ListMin<E>(minIndex, minItem);
    }

    public static void main(String[] args) {
        List<String> list = Arrays.asList("B", "A", "C");
        ListMin<String> listMin = getListMin(list);
        System.out.println(listMin.index);
        System.out.println(listMin.item);
    }
}
于 2013-08-10T12:45:19.347 回答
1

从 Java 7 开始,没有这样的方法;你必须自己实现它。请记住,对于 a List,这个问题不一定有一个正确答案,因为单个对象可以List多次添加,或者您可以有多个相等的对象。

于 2013-08-10T12:23:33.163 回答