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