比较 ArrayList 中的数字

Comparing numbers in ArrayList

我设置了一个 Java 方法,该方法采用包含整数值的新 Measurable 对象,并将它们添加到 ArrayList。添加它们时,每个新项目都会与任何现有值进行比较,以确定新项目是否应分类为 "min" 数字或 "max" 数字。我知道 ArrayLists 可以采用任何数据类型,所以我的代码的当前格式是错误的。但是,我不确定如何比较它们。任何帮助将不胜感激。

public void add(Measurable newItem) {
   list.add(newItem);

   if (min == null || min > newItem) {
      min = newItem;
   }
   else if (newItem > min) {
      max = newItem;
   }
}

一种解决方案是始终跟踪最小值和最大值 Measurable。这样,您无需在每次添加 newItem 时都循环 list,只需将其直接与这些最小值和最大值进行比较即可。

示例:如果 newItem 小于 currentMin,则 currentMin = newItemcurrentMax 也是如此。

当然需要实现"less than"操作,因为你是在处理对象。您可以按照 PM 77-1 的建议使用 compareTo()

min > newItem替换为min.compareTo(newItem) > 0

您的代码表明您已经跟踪列表的 minmax 值。但我认为在你的代码中

else if ( newItem > min) { ...

应该是

else if (max == null || newItem.compareTo(max) > 0) { ...

max 代码的方法部分应更正:

public void add(Measurable newItem) {
   list.add(newItem);

   if (min == null || min > newItem) {
      min = newItem;
   }
   if (max == null || newItem > max) {
      max = newItem;
   }
}

如果Measurable class实现了Comparable接口你可以写成

public void add(Measurable newItem) {
   list.add(newItem);

   if (min == null || newItem.compareTo(min) < 0) {
      min = newItem;
   }
   if (newItem.compareTo(max) > 0) {
      max = newItem;
   }
}

比较示例here

为什么要比较列表中的每个对象?如果要查找列表的最小值,请使用:

min = Collections.min(list,comparator);

求最大值:

max = Collections.max(list,comparator);

如果你想比较measurable,比如说它的实例变量int length,创建一个自定义比较器:

myComp extends Comparator<measurable>
{
    public int compare(measurable1,measurable2)
    {
        //compare measurable1.length and measurable2.length and return -1,1 or 0 
    }
}