如何找到 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&lt;Double&gt; 吗?【参考方案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 &lt;T extends Object &amp; Comparable&lt;? super T&gt; min(Collection&lt;? extends T&gt; 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 的最小值?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到信号的最小值?

如何在带有边界的python优化中找到全局最小值?

如何找到过滤列的条件最小值?

如何找到矩阵中最小值的确切数量? [复制]

如何在地图中找到最小值?

如何有效地找到 NumPy 中平滑多维数组的局部最小值?