内置函数用于同时在Java中使用min和minindex?

时间:2013-08-10 12:09:02

标签: java min

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);
    }
}