提问者:小点点

仅仅通过实现可比较的接口,我们如何对对象的元素进行排序?


下面是示例代码:

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);
    }

}

所以我不知道为什么我不能使用这些收藏。排序,直到我将Comparable接口的compareTo方法添加到类点。

我也不知道该方法如何比较通过返回-1、0和1对元素进行排序。

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


共1个答案

匿名用户

所以我不知道为什么我不能使用这些收藏。排序,直到我将Comparable接口的compareTo方法添加到类点。

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

我也不知道该方法如何比较通过返回-1、0和1对元素进行排序。

假设我给你一个包,里面有一张纸。每篇论文都列出了一个名字和一个电话号码,我想让你写一个电话簿,但你不知道是哪个订单。

你所能做的就是要求任何两个音符,其中一个比另一个高。

然后你就可以做这项工作了:假设到目前为止你已经整理了12张纸币。

然后从袋子里拿出第13张纸币,问我它是高于还是低于你那堆纸币中的第6张。我说“更高”。所以你问我关于9号的事,我说得更高。你问11号的事,我说低一点。如果你问我10号的事,我会说更高。

你只需要知道这些

看见一位刚刚回答了这个问题的预言家:给出这两个音符,告诉我:这一个比那一个低,高,还是相同这就是你所需要的。

您也已经过时了,这段代码和编写自己的compareTo的概念已经相当陈旧了。现在简单多了:

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

这就是你所需要的。将通过在每个生成int值的点上运行p.getValue()进行排序,然后通过将较低的int视为该点“位于”具有较高值的点之前来对点进行排序。

然后,您可以使用二级排序顺序(如果两个点的值相同,则改为按其ID排序)、定义行上的值应适合的位置、颠倒顺序等。

无需处理-1、0和1。