【问题标题】:Associations and hashmaps in javajava中的关联和哈希图
【发布时间】:2012-12-26 04:27:19
【问题描述】:

我有 4 节课。 一个持有有关客户的信息。另一个关于订单。 还有2个类扮演注册中心的角色,一个是客户注册中心,一个是订单注册中心。

订单注册表有一个如下所示的哈希图:

private HashMap<Integer, Order> orderRegistryMap = new HashMap<>();

客户注册也是如此。

private HashMap<Integer, Customer> customersRegistryMap = new HashMap<>();

类 orders 有一个 int orderid。类客户有一个 int customerid。 我通过两个注册表添加了演示数据(假设 1 个客户的 customerid 为 100,一个订单的 orderid 为 500。

我编写了简单的方法来通过 orderid 搜索订单或获取所有订单的哈希图。 我还编写了简单的方法来通过 customerid 搜索客户或获取所有客户的 hashmap。

我需要帮助编写一个方法,该方法可以通过 orderid 查找客户并获取与该 customerid 关联的所有订单。

有什么想法吗?

【问题讨论】:

  • 请发布您尝试过的内容,以及效果如何。
  • 这就是问题所在。我不知道如何在不编写遍历键直到找到匹配项的方法的情况下链接这些。这是要走的路吗?
  • 您有没有偶然发现Map 中定义的get() 函数?我建议查找哈希和哈希图的含义以及如何使用它们。更不用说你能读到的关于Object.hashCode()的所有信息(一旦在那里,Object.equals()
  • ppeterka 是对的,您需要向我们展示您尝试过的内容,并可能是您的数据示例,您希望结果应该是什么。
  • 我当然做到了,我编写了使用此 get() 函数根据键获取值的方法。

标签: java hashmap


【解决方案1】:

处理这种关系的典型方法(这似乎是一对多的关系)是将客户 ID 存储在订单本身中。这样做是因为每个订单只有一个客户。如果你不这样做,你别无选择,只能遍历数组。

编辑:对于反向关系 Customer->Orders 我会使用类似的反向注册表:

HashMap<Integer/*customer_id*/, 
        List<Integer> /*list of orders for the customer*/> customer_orders;

并与订单和客户保持同步。这将尽可能快地执行,我认为您不能使用更少的内存来实现您想要的。

【讨论】:

  • 我刚开始时就这样做了。订单数据包含客户编号。但是,一旦我选择了一个客户并加载了它的数据,我就看不到如何找到关联的订单,因为没有从客户到订单的关联,只有从订单到客户的关联。如果我要加载订单,找到下订单的客户会很容易,因为 customerid 就在那里。怎么把这里变成两条路? :)
  • 所以您已经有了解决第一个问题的方法——您可以找到每个订单的客户。至于第二个请求,我将构建一个包含相反映射的索引或 HashMap:HashMap&lt;Integer/*customer_id*/, List&lt;Integer&gt; /*list of orders for the customer*/&gt; 并保持同步。我认为这里没有太多可以优化的地方,而且我怀疑你可以使用更少的内存来做到这一点。
  • 谢谢!我现在就试试这个。
猜你喜欢
  • 2013-03-05
  • 2014-01-30
  • 1970-01-01
  • 2013-03-21
  • 2018-10-13
  • 2014-02-01
  • 2010-11-21
  • 2012-08-13
  • 2011-03-09
相关资源
最近更新 更多