java - 通用compareTo对不同对象类进行排序

标签 java generics

我正在尝试使用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/

相关文章:

java - 使用 `start` 在 Windows 批处理文件中使用双引号启动进程的副作用

java - 找不到 GlideApp

swift - 无法推断通用参数 "T"

Java 从 URL 读取 JSON

java - Thread.sleep() 挂起

scala - 具有泛型参数的抽象类的 JsonFormat

Java 泛型方法返回不同的类型 - 无一异常(exception)

java - 无法使用不同类型的参数实现接口(interface)

.net - 列出运行时从开放泛型类型创建的封闭类型

java - 调用 Thread.start() 时,happens-before 是否具有传递性?