当前位置: 首页 > 知识库问答 >
问题:

Java使用Comparable,collections.Sort()对自定义对象进行排序

澹台博文
2023-03-14
public interface Shape
{
    public double getArea();
    public double getPerimeter();
}
public class RightTriangle implements Shape, Comparable<Shape>
{
    private int leg1, leg2;
    public RightTriangle(int lg1, int lg2)
    {
        leg1 = lg1;
        leg2 = lg2;
    }


    public double getArea()
    {
        return (.5*leg1*leg2);
    }

    public double getPerimeter()
    {
        return (leg1+leg2 + getHypotenuse());
    }   


    private double getHypotenuse()
    {
        return (Math.sqrt(Math.pow(leg1,2)+Math.pow(leg2,2)));
    }

    public int compareTo(Shape obj)
    {
        return (int)(getArea()/getPerimeter());
    }

}
public class Rectangle implements Shape, Comparable<Shape>
{
    private int length, width;

    public Rectangle(int l, int w)
    {
        length = l;
        width = w;
    }

    public double getArea()
    {
        return (width*length);
    }

    public double getPerimeter()
    {
        return (2*width + 2*length);
    }

    public int compareTo(Shape obj)
    {
        return (int)(getArea()/getPerimeter());
    }

}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;
public class Demo
{
    public static void main (String[] args)
    {
        RightTriangle right = new RightTriangle(12,14);
        Rectangle rect = new Rectangle(7,10);
        ArrayList<Shape> al = new ArrayList<Shape>();
        al.add(right);
        al.add(rect);
        Collections.sort(al);
        for (int i = 0; i < al.size(); i++)
        {
            System.out.println (al.get(i));
        }
    }

}

我得到一个错误-“错误:找不到适合排序(ArrayList)的方法。我如何修复这个问题?

多谢了。

共有1个答案

冯福
2023-03-14

1.需要将Comparable接口扩展为Shape接口,而不是traingle和rectangle类,如下所示

public interface Shape extends Comparable<Shape>
{
 public double getArea();
 public double getPerimeter();
 public int compareTo(Shape obj);
}

2.RightTriangle和Rectangle类只会将Shape接口实现为

public class RightTriangle implements Shape
public class Rectangle implements Shape

**3.通过右键单击code实现RightTriangle和Rectangle类中的toString方法。选择Source->generate toString()

@Override
public String toString() {
    return "RightTriangle [leg1=" + leg1 + ", leg2=" + leg2 + "]";
}

@Override
    public String toString() {
        return "Rectangle [length=" + length + ", width=" + width + "]";
    }
 类似资料:
  • 问题内容: 我正在为我的通讯录应用程序实现排序功能。 我想排序一个。是一个包含四个字段的类:姓名,家庭电话,手机号码和地址。我想继续。 如何编写自定义排序功能来做到这一点? 问题答案: 这是有关订购对象的教程: Java教程-集合-对象排序 尽管我会举一些例子,但我还是建议你阅读它。 有多种排序方式。如果要定义自然的(默认)排序,则需要让实现。假设你想默认在上进行排序name,然后执行(为简单起见

  • 问题内容: 我有一个类Library,它包含一个Book对象数组,我需要根据Book的Title或PageNumber属性对数组进行排序。我不允许问题与Book一起使用Comparable类。您如何建议我对图书馆中的书籍进行排序?写我自己的排序?还是有更简单的方法?如果您需要代码片段,请问! 问题答案: 您可以提供一个用于比较您希望的任何类型的对象,否则。 对于数组和集合,请使用 甚至像TreeS

  • 本文向大家介绍JAVA对list集合进行排序Collections.sort(),包括了JAVA对list集合进行排序Collections.sort()的使用技巧和注意事项,需要的朋友参考一下 对一个集合中的对象进行排序,根据对象的某个指标的大小进行升序或降序排序。代码如下: 进行降序排列 进行升序排列 经过测试发现,只需要把两个对象的位置调换一下即可升序或降序。 如果指标相同,根据多个指标进行

  • 本文向大家介绍使用TreeMap在Java中对用户定义的对象进行排序,包括了使用TreeMap在Java中对用户定义的对象进行排序的使用技巧和注意事项,需要的朋友参考一下 要在Java中对用户定义的对象进行排序,代码如下- 示例 输出结果 名为Demo的类包含一个名为sort_objects的函数,该函数创建一个将整数和数组列表映射的哈希表。 它遍历这些值,并检查哪个是字符串,哪个是整数元素,并根

  • 问题内容: 我有一个对象数组,这些对象的属性称为“ CODE”。 如何通过自定义顺序对数组进行排序,例如: 尝试各种方法均未成功。请帮忙。 问题答案: 您可以将函数与函数一起使用。

  • 我试过了,但不起作用,二进制运算符'>'不能应用于两个'double?‘操作数 做这件事最方便快捷的方法是什么?