【问题标题】:Array object and maximum数组对象和最大值
【发布时间】:2016-01-21 05:20:10
【问题描述】:

我知道如何在数组中找到最小值和最大值。如果一个方法被称为 fMax():

public static double fMax(Object[] stuff)

参数是一个数组对象,我将如何找到这个数组的最大值?我不能只是这样做。好的,如果我希望该方法返回一个双精度值,并且如果尚未为名为 stuff 的参数分配内存,那么它将如何在 Double 类中返回值 NEGATIVE_INFINITY,否则返回值将是stuff数组中元素的最大值

Object max = stuff[0];
for (int i = 0; i < stuff.length; i++) {
    if (data[i] > max) {
        max = stuff[i];
    }
}

【问题讨论】:

  • Object 没有可比性。你有一些至少实现Comparable 的对象吗? (还有,你真的是依附于数组吗?想升级到List?)
  • 好的,我明白了。如果对象不可比较,那么您将如何找到最大值
  • 是什么让Object 比另一个Object 更大?
  • 如果对象不可比较,则无法进行比较,因此“最大”和“最小”没有意义。
  • 如果你有Double[],那么你就可以像现在这样去做。

标签: java


【解决方案1】:

要找到最大的东西,要么 a) 某些东西需要实现 Comparable 接口 b)您需要有某种明确的标准来确定最大值是多少,因此您可以将其放在 Comparator 的实例中

对象本身不会有任何对排序有用的东西。如果您对对象进行子类化,则可以根据该对象的组件进行排序。

public class Example implements Comparable
{
    int sortableValue = 0;

    public Example (int value)
    {
        this.sortableValue = value;
    }

    public int compareTo(Example other)
    {
        return Integer.compare(this.sortableValue, other.sortableValue);
    }
}

这是一个具有自然排序顺序的对象定义。 Java 可以使用任何内置的排序算法来查看它并知道它们所属的顺序。

如果你不为 java 提供一种方法来确定一个对象与另一个相同类型的对象相比如何具有更大或更小的相对值,它不会自己弄清楚。

【讨论】:

    【解决方案2】:

    Object 不可比较,如果要比较值、排序或查找某些内容,则需要确定类型。 Streams 是最强大、最通用的工具,如果你想找到 Double 数组的最小值/最大值,这将解决你的问题:

    Double[] arr = {1d, 2d, 3d, 4d};
    Double min = Arrays.asList(arr).stream().parallel().min(Double::compare).get();
    Double max = Arrays.asList(arr).stream().parallel().max(Double::compare).get();    
    

    【讨论】:

      【解决方案3】:
      String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
      

      现在,只需比较我们从对象创建的新原始数组。如果在此之后不需要该对象,并且不打算返回数组对象,则将原始数组设为 null,以减少内存占用。

      检查一下:

      How to compare two object arrays in Java?

      【讨论】:

      • 是的 - 现在你用自己的话自相矛盾。
      猜你喜欢
      • 2017-01-25
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 2012-02-10
      • 2021-10-02
      相关资源
      最近更新 更多