我正在尝试使用compareTo返回各种类型对象的最大或最大值。这适用于整数、字符串,但当我尝试包含圆圈时,我遇到了...
如何获得一种通用方法来比较所有对象?在这种情况下,圆只有一个变量,半径,可以进行比较......
public class CompareToVariousObjects {
public static void main(String[] args) {
Integer[] numbers = {1, -2, 3, 0, -1, 2, -3};
String[] colors = {"blue", "green", "white", "red", "black"};
Circle[] circles = {new Circle(5.9), new Circle(.5), new Circle(1),
new Circle(2.5), new Circle(.1)};
System.out.println("Numerically, the maximum number is: " + max(numbers));
System.out.println("Alphabetically, the maximum color is: " + max(colors));
System.out.println("The largest circle has a radius of: " + max(circles);
}
public static <T extends Comparable<T>> T max(T[] list) {
T currentMax = null;
int currentMaxIndex;
for (int i = 0; i < list.length - 1; i++) {
currentMax = list[i];
currentMaxIndex = i;
for (int j = i + 1; j < list.length; j++) {
if (currentMax.compareTo(list[j]) > 0) {
currentMax = list[j];
currentMaxIndex = j;
}
}
if (currentMaxIndex != i) {
list[currentMaxIndex] = list[i];
list[i] = currentMax;
}
}
return currentMax;
}
}
最佳答案
“如何获得一种通用方法来比较所有对象?”
没有一种通用的方法来比较对象,这就是为什么首先创建了compareTo和Comparable。考虑一个类的学生,我可以根据高度、分数、年龄来比较他们......
只需创建一个您想要的概念类(例如一个圆圈),实现 Comparable 并定义compareTo 来定义如何比较该对象的标准。例如:
public class Circle implements Comparable<Circle> {
int diameter;
//constructor
public int compareTo(Circle c) {
if(c.diameter> this.diameter){
return 1;
}else if ....
关于java - 通用compareTo对不同对象类进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26107192/