java - 比较两个圆类型的对象

标签 java compare comparator comparable

创建一个名为“Circle”的 Java 类,该类实现 java.io.Serialized 接口(interface)并根据半径建模圆。半径不能小于零。实现半径的 getter 和 setter 方法。还包括在 Circle 类中覆盖 toString。创建类的比较器,用于比较两个 Circle 类型的对象。

这就是我目前所拥有的

import java.io.Serializable;


public class Circle implements Serializable, Comparable<Circle> {

private int radius = 1;

public Circle() {
}


public Circle(int radius) {
    setRadius(radius);

}

public void setRadius(int v) {
    if (v > 0) {
        this.radius = v;
    }

}

public int getRadius() {
    return this.radius;

}



@Override
public String toString() {
    return "Circle{" + "radius=" + radius + '}';
}

@Override
public int compareTo(Circle o) {
    //no idea what to put here

}



}

这是我的比较器类

 import java.util.Comparator;

public class CompareCircle implements Comparator<Circle> {

CompareCircle(Circle c1, Circle c2) {

}

@Override
public int compare(Circle o1, Circle o2) {
    if (o1.getRadius() > o2.getRadius()) {
        return o1.getRadius();
    } else {
        return o2.getRadius();
    }

}
}

我的问题是我这样做对还是不对?

最佳答案

首先,您不需要实现 Comparable 或重写 compareTo()

根据documentation ,这就是 compare() 应该返回的内容:

Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

您可以使用Integer.compare()满足这些要求:

Returns: the value 0 if x == y; a value less than 0 if x < y; and a value greater than 0 if x > y

import java.util.Comparator;

public class CompareCircle implements Comparator<Circle> {
    @Override
    public int compare(Circle o1, Circle o2) {
        return Integer.compare(o1.getRadius(), o2.getRadius());
    }
}

要进行比较,您需要创建一个 CompareCircle 实例。您可以将其与 Collections.max() 一起使用检索最大的对象:

import java.util.ArrayList;
import java.util.Collections;

public class Main {
    public static void main(String[] args){
        ArrayList<Circle> list = new ArrayList<Circle>() {{
            add(new Circle(4));
            add(new Circle(7));
            add(new Circle(2));
        }};

        CompareCircle comp = new CompareCircle();
        Circle c = Collections.max(list, comp);

        System.out.println(c.getRadius());
    }
}

输出:

7

关于java - 比较两个圆类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46499896/

相关文章:

java - 线程 "main"java.lang.UnsupportedClassVersionError : JVMCFRE003 bad major version 中出现异常

r - 比较两个表的元素,平均现有元素并将 NA 保留为 R 中不存在的元素

php - MYSQL,无法比较(等于)两个值

java - Scala 类 Gson 库

java - 如何以编程方式设置RelativeLayout的layout_constraintTop_toBottomOf “parent”? (安卓)

C++:另一个 'check if pointer is null'

java - 比较方法在排序文件时违反了它的一般契约

Android SortedList 删除方法正在跳过项目

c++ - std::设置比较器错误: "invalid operator<"

java - Spring MVC 如何转换 @RequestParam 值?