我们如何仅通过实现 Comparable 接口对 Objects 的元素进行排序?

How can we sort elements of Objects just by implementing Comparable interface?

示例代码如下:

public class test {

    public static void main(String[] args) {
        ArrayList<Point> list = new ArrayList<Point>();
        list.add(new Point(1));
        list.add(new Point(4));
        list.add(new Point(2));
        list.add(new Point(3));
        list.add(new Point(2));
        Collections.sort(list);
    }

}

所以我不知道为什么我不能使用 Collections.sort 直到我将 Comparable 接口的 compareTo 方法添加到 class 点。

我也不知道 compareTo 方法如何仅按 return -1、0 和 1 对元素进行排序。

如果有人有任何想法,请向我解释。

So I don't know why I can't use the Collections.sort until I add the compareTo method of Comparable interface to class Point.

因为 java 不知道为什么 new Point(1) 应该排在 new Point(2) 之上或之下。

I also do not know how the method compareTo sorting elements just by return -1, 0 and 1.

假设我给你一个袋子,里面有一张纸。每篇论文都列出了一个名字和一个 phone 编号,我想让你写一本被订购的 phone 书,但你不知道是哪个订购。

你所能做的就是要求任意 2 个音符,其中一个比另一个 'higher'。

然后你就可以完成这项工作了:假设你到目前为止已经整理了 12 个笔记。

然后从包里拿出第13个音符,问我它比你堆里的第6个音符高还是低。我说 'higher'。所以你问我 9 号,我说更高。你问11号,我说更低。你问我10号,我说更高

这就是您需要知道的全部> 您将音符滑到第 10 和第 11 之间,然后移动到第 14 个音符。

看到了吗?一个只回答问题的神谕:给定这 2 个注释,告诉我:这个比那个低、高还是相同? - 这就是您所需要的。

你也落伍了,这段代码和自己编写 compareTo 的想法已经很老了。现在简单多了:

list.sort(Comparator.comparingInt(Point::getValue));

就是你所需要的。将在每个产生 int 值的点上按 运行 p.getValue() 排序,然后通过将较低的 int 视为意味着点 'comes before' 具有较高值的​​点来对点进行排序。

然后您可以使用次要排序顺序(如果 2 个点具有相同的值,则改为按其 ID 排序),定义 null 值应该放在线上的位置,颠倒顺序等等。

无需混淆 -1、0 和 +1。