有没有办法保留对 hashmap 的引用,它是对象的实例变量?

Is there a way to keep a reference to a hashmap which is an instance variable of an object?

所以我有一个名为 Member 的构造函数。

它存储会员 ID 和会员所有收据的 Hashmap。哈希映射包括一个用于存储购买日期的字符串,以及一个用于存储所购买商品的字符串数组列表。

public class Member {

    // Member ID of customer
    private int memberID;
    // All of the receipts from this customer. Key is Date and Value is List of all items on that date.
    public HashMap<String, ArrayList<String>> receipts;

    public Member(int memberID) {
        this.memberID = memberID;
        this.receipts = new HashMap<>();
    }

在接下来的class中,生成了会员的收据。每次迭代完成时,通过输入一个新的memberID来实例化一个新的Member对象。

        for (int memberID : memberIDSet) {
            // Creates a new member based on the ID.
            Member currentMember = new Member(memberID);
            System.out.println("===== Current Member: " + memberID + " =====");

            TreeSet<String> memberPurchaseDates = getMemberPurchaseDates(memberID);

            // Goes through the list of dates and searches specifically for the dates in which the memberID purchased an item.
            for (String date : memberPurchaseDates) {
                // Creates a receipt in the "Member.java" class for the currentMember.
                // HERE IS WHERE I AM CONFUSED. Is this possible?
                currentMember.receipts.put(date, fillReceipt(memberID, date));
            }

            //Prints out what I want perfectly, but does not store the hashmap for each new member object created.
            System.out.println(currentMember.receipts);
        }

每次循环迭代时,对前一个 hashmap 的引用都会丢失。

我该如何存储这些信息?我是否需要创建另一个构造函数 class 来跟踪收据?

我想您可能对 类 感到困惑。您的代码

Member currentMember = new Member(memberID);

为特定成员 ID 创建一个新的空成员,这就是为什么你说哈希映射被重置。它并没有真正被重置,前一个成员对象的哈希映射包含数据。

您的代码实际上看起来是正确的,您只需要存储您的成员。 例如,

        List<Member> members = new ArrayList<>();
        for (int memberID : memberIDSet) {
            // Creates a new member based on the ID.
            Member currentMember = new Member(memberID);
            System.out.println("===== Current Member: " + memberID + " =====");

            TreeSet<String> memberPurchaseDates = getMemberPurchaseDates(memberID);

            // Goes through the list of dates and searches specifically for the dates in which the memberID purchased an item.
            for (String date : memberPurchaseDates) {
                // Creates a receipt in the "Member.java" class for the currentMember.
                // HERE IS WHERE I AM CONFUSED. Is this possible?
                currentMember.receipts.put(date, fillReceipt(memberID, date));
            }

            //Prints out what I want perfectly, but does not store the hashmap for each new member object created.
            System.out.println(currentMember.receipts);
            members.add(currentMember);
        }
        for (Member member : members) {
            System.out.println(member.receipts);
        }

除非你想把所有东西都放到1个HashMap中,那样的话你需要从Member中抽取出来。

或者 memberIDSet 是否有重复成员?在这种情况下,它不会是一个集合,但我想你必须保留一个 id 到成员的映射,这样如果该成员已经存在,你就不会创建一个新成员。