比较 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 = newItem
。 currentMax
也是如此。
当然需要实现"less than"操作,因为你是在处理对象。您可以按照 PM 77-1 的建议使用 compareTo()
。
将min > newItem
替换为min.compareTo(newItem) > 0
您的代码表明您已经跟踪列表的 min
和 max
值。但我认为在你的代码中
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
}
}
我设置了一个 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 = newItem
。 currentMax
也是如此。
当然需要实现"less than"操作,因为你是在处理对象。您可以按照 PM 77-1 的建议使用 compareTo()
。
将min > newItem
替换为min.compareTo(newItem) > 0
您的代码表明您已经跟踪列表的 min
和 max
值。但我认为在你的代码中
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
}
}