如何找到 ArrayList 的最小值?
Posted
技术标签:
【中文标题】如何找到 ArrayList 的最小值?【英文标题】:How do you find the smallest value of an ArrayList? 【发布时间】:2016-03-24 22:24:17 【问题描述】:我有一个名为 children 的数组列表,其中包含在 GUI 中围绕特定整数距离移动的对象,我需要找到这些值中的最小值并将其打印到控制台。
我很确定这需要一个 for 循环,对吗?我只是不知道如何正确构造它以确保它查看“孩子”ArrayList
中的值。
或者 Eclipse 中是否有一些内置功能可以计算数组列表的最小值?
【问题讨论】:
您在使用 Java 吗?请张贴代码。 Finding smallest value in an array most efficiently的可能重复 使用 Java 8 你可以做到yourlist.stream().min(someComparator)
列表中元素的类型是什么?数字,还是其他类型?如果是其他类型,您希望根据什么标准来比较它们?
【参考方案1】:
Collection 类具有用于查找 Collection 中最小或最大元素的静态方法。例如:
System.out.println("max: " + Collections.max(list));
System.out.println("min: " + Collections.min(list));
【讨论】:
【参考方案2】:如果你有一个正整数数组,你可以通过以下逻辑找到最小的一个:
int [] numbers = 10, 20, 30, 40, 50;
int smallest = numbers[0];
for(int x : numbers )
if (x < smallest)
smallest = x;
System.out.println(smallest);
【讨论】:
我的数组列表是孩子,有 5 个孩子在 gui 中移动随机距离。您将如何构造它以使其知道查看“子”数组列表?【参考方案3】:您可以使用比较器http://beginnersbook.com/2013/12/java-arraylist-of-object-sort-example-comparable-and-comparator/ 对数组列表进行排序
排序后,选择第一个值,它将是最小的一个
【讨论】:
【参考方案4】:你是对的,你必须使用循环。您需要从列表中取出一个值,并将其与所有其他值进行比较。如果没有更小的,那就是最小的。如果有,您需要检查下一个。 Java 代码可能是这样的:
numberLoop: for(int number: children)
for(int numberToCompare: children)
if(numberToCompare < number)numberLoop.continue;
System.out.println(number);
break;
PS:提供方法的不是 Eclipse。它基本上只是一个编辑文本的程序(如 Word)。方法由 java API 提供
【讨论】:
【参考方案5】:类似:
double smallest= children.get(0);
for(double d: children)
if(smallest > d) smallest=d;
【讨论】:
我试过这个并收到一条错误消息,提示“操作符 > 未定义参数类型” @AustinBrown 我刚刚在 Ideone 上运行它,儿童是ArrayList<Double>
吗?【参考方案6】:
使用 Java 8 流,
令 arr 为整数数组,
int[] arr = new int[]54,234,1,45,14,54;
int small = Arrays.stream(arr).reduce((x, y) -> x < y ? x : y).getAsInt();
int large = Arrays.stream(arr).reduce((x, y) -> x > y ? x : y).getAsInt();
System.out.println(small);
System.out.println(large);
【讨论】:
【参考方案7】:JAVA ARRAY List中可以通过以下方式找到ArrayList的最小值: 方式 1. 使用 Collection 类查找 ArrayList 的最小值。
您可以使用名为 min 的集合类。 此方法根据元素的自然顺序返回指定集合的最小元素/值。static <T extends Object & Comparable<? super T> min(Collection<? extends T> c)
例子
package com.javacodeexamples.collections.arraylist;
import java.util.ArrayList;
import java.util.Collections;
public class FindMinValueArrayListExample
public static void main(String[] args)
/*
* ArrayList containing student marks
*/
ArrayList<Integer> aListMarks = new ArrayList<Integer>();
//add elements to ArrayList
aListMarks.add(53);
aListMarks.add(67);
aListMarks.add(89);
aListMarks.add(43);
aListMarks.add(87);
aListMarks.add(71);
aListMarks.add(63);
aListMarks.add(45);
aListMarks.add(69);
aListMarks.add(53);
/*
* To find minimum value in ArrayList, use
* min method of Collections class.
*/
System.out.println( "ArrayList Min Value: " + Collections.min(aListMarks) );
输出是:
ArrayList Min Value: 43
方式2:使用for循环查找ArrayList的最小值。
您可以使用 for 循环而不是集合。例子
package com.javacodeexamples.collections.arraylist;
import java.util.ArrayList;
public class FindMinValueArrayListExample
public static void main(String[] args)
/*
* ArrayList containing student marks
*/
ArrayList<Integer> aListMarks = new ArrayList<Integer>();
//add elements to ArrayList
aListMarks.add(53);
aListMarks.add(67);
aListMarks.add(89);
aListMarks.add(43);
aListMarks.add(87);
aListMarks.add(71);
aListMarks.add(63);
aListMarks.add(45);
aListMarks.add(69);
aListMarks.add(53);
//declare min and max value as the first element of the list
int min = aListMarks.get(0);
//declare min and max elements index as 0 (i.e. first element)
int minIndex = 0;
//Iterate through ArrayList
for(int i = 1; i < aListMarks.size(); i++ )
/*
* If current value is less than min value, it
* is new minimum value
*/
if( aListMarks.get(i) < min )
min = aListMarks.get(i);
minIndex = i;
System.out.println("ArrayList Min Value is: "
+ min
+ ", Found at index: "
+ minIndex
);
结果是
ArrayList Min Value is: 43, Found at index: 3
【讨论】:
虽然这回答了这个问题,但它以一种冗长的方式回答,最高投票的回答基本上说“使用 Collections.min”,这就是你的回答所说的,但用更多的词。 【参考方案8】:对于递归解决方案
public static void main(String[] args)
int arr[] = 1, 4, 45, 6, -50, 10, 2;
System.out.println("Minimum value = " + minValue(arr,arr.length));
static int minValue (int arr[], int n)
if(n == 1)
return arr[0];
return Math.min(arr[n-1], minValue(arr,n-1));
【讨论】:
【参考方案9】:这对我有用!
public void minValue()
// given
List<Integer> listOfIntegers = Arrays.asList(1, 2, 3, 4, 56, 7, 89, 10);
Integer expectedResult = 1;
// then
Integer min= listOfIntegers
.stream()
.mapToInt(v -> v)
.min().orElseThrow(NoSuchElementException::new);
assertEquals("Should be 1", expectedResult, min);
【讨论】:
以上是关于如何找到 ArrayList 的最小值?的主要内容,如果未能解决你的问题,请参考以下文章