【问题标题】:How to sort an array of objects(Points) in Java?如何在 Java 中对对象(点)数组进行排序?
【发布时间】:2011-03-05 21:35:12
【问题描述】:

所以我想使用内置的排序方法对一个点数组进行排序,按一个特定的坐标,比如 x。我怎样才能做到这一点?这是一个示例代码:

Point A[] = new Point[10];
// ... Initialize etc.
Arrays.sort(A, x-coordinate);

Point Class 中是否有内置的 x 坐标比较器?如果没有,我该如何创建并使用它。举个例子就好了。

谢谢。

【问题讨论】:

    标签: java arrays sorting object


    【解决方案1】:

    Point 不是Comparable,因此您需要编写自己的比较器并在调用Arrays.sort 时将其传入。幸运的是,这并不难:

    class PointCmp implements Comparator<Point> {
        int compare(Point a, Point b) {
            return (a.x < b.x) ? -1 : (a.x > b.x) ? 1 : 0;
        }
    }
    
    Arrays.sort(A, new PointCmp());
    

    【讨论】:

    • 请使用中的任意两个。人们一直为此使用减法。其中一个将有一个溢出的减法,然后繁荣。
    • 为什么?如果您在 GUI 上使用点,那很好。或者你有一个超过 2G 像素的物理屏幕(以考虑签名问题)。如果这是真的,我恨你!
    • 使用减法代替 、== 是一个“可爱的程序员技巧”。使您的代码更难阅读,并引入错误的可能性而没有真正的好处。如果你在我的项目中写了这个,我会告诉你再试一次...... :)
    • OTOH,如果您要与 Point2D.DoublePoint2D.Float 合作,那么您将希望按照我更新答案的方式进行。
    • 或者,您可以使用Double.compare(a.x, b.x)。更短,几乎不可能出错。
    【解决方案2】:

    你也可以使用 Apache Commons Bean Comparator

    http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/BeanComparator.html

    然后做类似的事情

    import org.apache.commons.beanutils.BeanComparator;
    
    Arrays.sort(A, new BeanComparator("x"));
    

    【讨论】:

    • 有多少项目还没有 apache commons?我还没有参与过一个在 Maven 链中没有将其作为依赖项的大型项目
    • @JarrodRoberson 放松一下,它展示了一种通过字段抽象比较器的有趣方式,如果他们愿意,OP 可以自己编写一个
    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 2016-10-30
    • 1970-01-01
    • 2012-04-14
    • 2019-11-02
    相关资源
    最近更新 更多