关于使用HashMap的方式的设计实现

wou*_*non 0 java hashmap concurrenthashmap

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

我试图在HashMap中保存主要帐户信息.因为,需要稍后检索.

保存时,我还需要保存二级帐户指令.因此,我需要使用key作为主帐户保存两个对象.

1) Secondary Account
2) Secondary Instruction.
Run Code Online (Sandbox Code Playgroud)

我为帐户和指令对象重写了equals和hashcode.

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

- 初始化

private static final Map<Integer, ArrayList<Object[]>> primaryToSecondaryAcct = new ConcurrentHashMap<Integer, ArrayList<Object[]>>();
Run Code Online (Sandbox Code Playgroud)

- 投入价值

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);
}
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*new 5

代替:

Map<Integer, ArrayList<Object[]>>
Run Code Online (Sandbox Code Playgroud)

为什么没有

Map<Account, SecondaryInfo>
Run Code Online (Sandbox Code Playgroud)

目前你正在为密钥存储一个集合,你必须管理它,当你从它中拉出它时,迭代它等Map.我认为创建一个合适的抽象并委托给它更好.该抽象将在一个位置查看验证,迭代等,而不是每次访问时都要担心它Map.

记住 - 面向对象是告诉对象为你做事情,而不是向他们询问信息并自己做.

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