0

在 GUI 中显示帐户时,我需要显示主帐户(用于辅助帐户)每个主帐户可以有多个辅助帐户。

我正在尝试将主要到次要帐户信息保存在 HashMap 中。因为,这需要稍后检索。

在保存的同时,我还需要保存二级账户指令。所以,我需要保存两个带有键的对象作为主帐户。

1) Secondary Account
2) Secondary Instruction.

我为帐户和指令对象覆盖了等于和哈希码。

我正在尝试使用主帐户哈希码作为键和值作为对象列表 [2]

-- 初始化

private static final Map<Integer, ArrayList<Object[]>> primaryToSecondaryAcct = new ConcurrentHashMap<Integer, ArrayList<Object[]>>();

-- 价值观

final Object[] acctInstr = new Object[2];
acctInstr[0] = acct;
acctInstr[1] = instr;
if(primaryToSecondaryAcct.get(getExistingAccount().hashCode()) != null) {
    primaryToSecondaryAcct.get(getExistingAccount().hashCode()).add(acctInstr);
} else {
    final ArrayList<Object[]> acctInstrList = new ArrayList<Object[]>();
    acctInstrList.add(acctInstr);
    primaryToSecondaryAcct.put(getExistingAccount().hashCode(), acctInstrList);
}

我想知道这是否正确以及是否有更好的方法。你能建议吗?

4

4 回答 4

5

代替:

Map<Integer, ArrayList<Object[]>>

为什么没有

Map<Account, SecondaryInfo>

目前,您正在针对密钥存储一个集合,当您从Map. 我认为创建一个合适的抽象并委托给它要好得多。该抽象将在一个位置处理验证、迭代等,而不是每次访问Map.

请记住 - OO 是关于告诉对象为您做事,而不是向他们询问信息并自己做。

我会用Integer特定Account对象替换您对帐户的表示。否则你将不得不管理大量代表不同类型的整数,而且很容易将它们混合在一起。键入它们(尽管使用一个普通的类)意味着您可以使用自动化工具轻松地重构并轻松确定类型,而无需诉诸命名约定。

于 2012-09-11T16:06:43.410 回答
3

我建议使用Accountas key,因为对于两个不同的对象,hashcode 可以是相同的。

于 2012-09-11T16:15:16.613 回答
2

您想要的第一件事是MultiMap,您可以在Google的Guava库中找到它。这类似于 a Map<K, Collection<V>>,并为您将一个键映射到多个值,因此您不必重新发明它。

接下来,替换Object[]为您自己的自定义类:

public class SecondaryInformation {
    private SecondaryAccount secondaryAccount;
    private SecondaryInstruction secondaryInstruction;

    // Constructors, getters, setters, etc.
}

所以你会有一个MultiMap<Integer, SecondaryInformation>. 这是关于MultiMap.

于 2012-09-11T16:13:37.630 回答
2

如果对于PrimarySecondary帐户,您的课程如下:

public class PrimaryAccount 
{
    int id;
    private List<SecondaryAccount> secondaryAccounts;   
}

public class SecondaryAccount
{
    int id;
    private List<String> instructions;
    PrimaryAccount primaryAccount;
}

那么,也许你甚至不需要HashMap. 但是,您可能仍希望保持Hashmap快速查找 Accounts: HashMap<Integer,PrimaryAccoount>,您将在其中存储帐户 ID 和主帐户。

这使得实现更干净。您是否确实需要为帐户编写Primary课程Secondary

于 2012-09-11T16:34:16.337 回答