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