首页 > 解决方案 > 如何跟踪在 java 中相互引用的对象列表?

问题描述

我正在编写一个具有创建合同的用户的 java 应用程序。合同有一个可以添加到合同中的支持用户列表。创建此合同的用户不在支持者列表中。支持用户可以帮助用户的初始创建者遵守合同,例如“60 天不喝酒”。我有一个可以在用户类中显示合同列表的功能。我还可以将用户添加到合同中的列表中。以后我应该如何编写 viewSupportedContracts() 函数并考虑到最好的内存问题?我将在主类中使用 User 对象。

package core;

import java.util.ArrayList;
import java.util.List;

public class Contract {
    private boolean termsAndAgreementSigned = false;
    private List<User> supporters = new ArrayList<User>();
    
    public Contract()
    {

    }

    public void setTermsAndAgreementSigned(boolean termsAndAgreementSigned) {
        this.termsAndAgreementSigned = termsAndAgreementSigned;
    }

    public boolean isTermsAndAgreementSigned() {
        return termsAndAgreementSigned;
    }

    public void addSupporter(User user)
    {
        supporters.add(user);
    }
    
    public void viewSupporters()
    {
        System.out.println("These are the supporters");
    }

}
package core;

import java.util.ArrayList;
import java.util.List;

public class User {
    private List<Contract> contracts = new ArrayList<Contract>();
    
    public User()
    {
        
    }

    public void addContract(Contract contract) throws Exception {
        if(contract.isTermsAndAgreementSigned() == true)
            contracts.add(contract);
    }
    
    public List<Contract> getContracts() throws Exception {
        return contracts;
    }

    
    public void viewSupportedContracts() {
        // TODO Auto-generated method stub
        
    }
    
}

标签: javatreedynamic-arrays

解决方案


似乎您与用户添加合同的代码在内存方面非常有效,在我看来,您正在寻找一种查看合同的方法。我的方法是在 Contract 类中实现一个 toString() 方法,然后在 List 上调用 toString 或编写一个 for 循环以在新行上打印每个 Contract

public class Contract {
    public String toString() {
        return supporters.toString() + " users support you!";
    }
}

public class User {
    public String toString() {
        return "Create generated user text here";
    }

    public void viewSupportedContracts() {
        System.out.println(contracts.toString());        
    }
}

或者

public void viewSupportedContracts() {
    for(Contract contract: contracts) {
        System.out.println(contract.toString());
    }        
}

推荐阅读