如何跟踪 java 中相互引用的对象列表?

How can I keep track of object lists that reference each other in java?

我正在编写一个 java 应用程序,其中包含创建合同的用户。合同有一个可以添加到合同中的支持用户列表。创建此合约的用户不在支持者列表中。支持用户可以帮助用户的初始创建者遵守合同,例如“60 天不喝酒”。 我有一个功能可以显示用户 class 中的合同列表。 我还可以将用户添加到合同中的列表中。 以后我应该如何编写 viewSupportedContracts() 函数并牢记最佳内存问题? 我将在主 class.

中使用用户对象
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
        
    }
    
}

您添加与用户的合同的代码似乎在内存方面非常有效,在我看来您正在寻找一种查看合同的方法。我的方法是在 Contract class 中实现一个 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());
    }        
}