Java 使用Comparable和compareTo()对子类的ArrayList进行排序

Java 使用Comparable和compareTo()对子类的ArrayList进行排序,java,sorting,arraylist,comparable,compareto,Java,Sorting,Arraylist,Comparable,Compareto,我有一个银行账户程序,它实现了一个BankAccount超类,扩展到CheckingAccount和SavingsAccount子类 每个帐户有四个属性:名字、姓氏、社会保险和余额 我有一个BankDatabase类,它创建了一个新的ArrayList来存放这些对象 我想使用Comparable接口和compareTo()方法对这个ArrayList进行排序 对于这段代码,我需要使用Comparable和compareTo(),因为它是赋值的一部分 我已经导入了java.util.ArrayLi

我有一个银行账户程序,它实现了一个BankAccount超类,扩展到CheckingAccount和SavingsAccount子类

每个帐户有四个属性:名字、姓氏、社会保险和余额

我有一个BankDatabase类,它创建了一个新的ArrayList来存放这些对象

我想使用Comparable接口和compareTo()方法对这个ArrayList进行排序

对于这段代码,我需要使用ComparablecompareTo(),因为它是赋值的一部分

我已经导入了java.util.ArrayList、java.util.Collections和java.util.List

下面是我的BankDatabase类和创建新支票帐户或储蓄帐户的两种方法:

public class BankDatabase
{

    String first;
    String last;
    List <BankAccount> database;

    BankDatabase()
    {

        database = new ArrayList <BankAccount>();

    }

    void createCheckingAccount(String customerName, String ssn, float deposit)
    {

        String[] customerNames = customerName.split(" ");
        first = customerNames[0];
        last = customerNames[1];

        database.add(new CheckingAccount(first, last, ssn, deposit));

    }

    void createSavingsAccount(String customerName, String ssn, float deposit)
    {

        String[] customerNames = customerName.split(" ");
        first = customerNames[0];
        last = customerNames[1];

        database.add(new SavingsAccount(first, last, ssn, deposit));

    }
公共类数据库
{
先串;
最后一串;
列表数据库;
银行数据库()
{
database=newarraylist();
}
作废createCheckingAccount(字符串customerName、字符串ssn、浮动存款)
{
字符串[]customerName=customerName.split(“”);
第一个=客户名称[0];
last=客户名称[1];
添加(新的CheckingAccount(第一个、最后一个、ssn、存款));
}
作废createSavingsAccount(字符串客户名称、字符串ssn、浮动存款)
{
字符串[]customerName=customerName.split(“”);
第一个=客户名称[0];
last=客户名称[1];
添加(新的SavingsAccount(第一个、最后一个、ssn、存款));
}
任何帮助都将不胜感激。我已经浏览了这里的其他线程,使用集合似乎非常简单,但一直失败

我得到的错误之一是:线程“main”java.lang.RuntimeException中的异常:不可编译的源代码-错误的符号类型:java.util.Collections.sort


谢谢!

问题在于您的接口声明:

public interface Comparable<BankAccount>
{
    int compareTo(BankAccount other);       
}
但这并没有什么特别的优势,而且让人困惑的是,您自己的接口与知名接口同名



另一个不太明显的问题是,您定义中的
BankAccount
实际上并没有引用您定义的
BankAccount
类-它是一个类型变量。它没有特别引用任何类型-您可以用
t
替换它(即
Comparable
),它也会做同样的事情。

考虑提供一个示例来演示您的问题。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应。如果集合的元素类型为
,则无需通过
比较器>可与自身或其超类之一进行比较。请提供与收到的任何异常相关的堆栈跟踪。但是,在您的特定情况下,错误消息本身非常奇怪,可能表明您的IDE存在问题。您的部分代码没有正确编译。通常是IDE问题。您是否可以尝试
Project->Clean…
?同样,这可能是一个愚蠢的问题,但我希望您不要让
界面具有可比性
界面。您应该使用
java.lang.Compariable
。大家好,如果我的问题和示例代码不清楚,感谢大家的评论和道歉。@Vinet,这不是一个愚蠢的问题;事实上,我是在制作可比的I接口。我不知道我所要做的只是实现的标准流程。我刚刚删除了我创建的接口,现在它可以工作了。我想它必须是一个简单的解决方案。再次感谢大家。
@Override
    public int compareTo(BankAccount other)
    {

        if (this.getBalance() < other.getBalance())
        {
            return -1;
        }

        if (this.getBalance() > other.getBalance())
        {
            return 1;
        }

        return 0;
    }
void print()
    {

        Collections.sort(database);

        for (BankAccount database1 : database)
        {

            System.out.println(database1);

        }

    }
public class BankDatabase
{

    String first;
    String last;
    List <BankAccount> database;

    BankDatabase()
    {

        database = new ArrayList <BankAccount>();

    }

    void createCheckingAccount(String customerName, String ssn, float deposit)
    {

        String[] customerNames = customerName.split(" ");
        first = customerNames[0];
        last = customerNames[1];

        database.add(new CheckingAccount(first, last, ssn, deposit));

    }

    void createSavingsAccount(String customerName, String ssn, float deposit)
    {

        String[] customerNames = customerName.split(" ");
        first = customerNames[0];
        last = customerNames[1];

        database.add(new SavingsAccount(first, last, ssn, deposit));

    }
public interface Comparable<BankAccount>
{
    int compareTo(BankAccount other);       
}
public interface Comparable<BankAccount> extends java.lang.Comparable<BankAccount> {
  @Override int compareTo(BankAccount other);
}