比较ArrayList中的数字

时间:2015-06-24 00:02:49

标签: java arraylist compare

我设置了一个Java方法,它接受包含整数值的新Measurable个对象,并将它们添加到ArrayList。添加它们后,将每个新项目与任何现有值进行比较,以确定新项目是否应归类为“最小”数字或“最大”数字。我知道ArrayLists可以采用任何数据类型,因此我的代码的当前格式是错误的。但是,我不确定如何比较它们。任何帮助将不胜感激。

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

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

4 个答案:

答案 0 :(得分:1)

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

示例:如果newItem小于currentMin,则currentMin = newItem。同样适用于currentMax

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

答案 1 :(得分:1)

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

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

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

如果Measurable类实现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

答案 2 :(得分:1)

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

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 
    }
}

答案 3 :(得分:0)

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

您的代码建议您已跟踪列表的minmax值。但我认为你的代码在行

else if ( newItem > min) { ...

应该是

else if (max == null || newItem.compareTo(max) > 0) { ...
相关问题