【问题标题】:looping through array lists Java遍历数组列表Java
【发布时间】:2015-02-23 15:23:54
【问题描述】:

我正在阅读 Excel 工作表中的项目列表。每个项目名称都有一个从同一列表定义的父项目名称(作为单独的列)。因此,这形成了一个树层次结构,其中一个项目是同一列表中另一个项目的父项,并且父项也有多个子项。 项目名称在整个列表中不是唯一的。 项仅在特定父项下是唯一的。

每个项目的 ID 是在从输入文件中读取时生成的。 现在我想为每个项目获取其父项目的 ID。

对于从文件中读取的当前记录,父项可以出现在我们尚未读取的行的下方,因此我们不知道其父项的 id。

当我想到一个逻辑时,它会导致循环遍历数组列表和 hashmap 键集以获取它。

我需要帮助以获得更好的逻辑来解决这个问题。提前致谢!

编辑 1:

现在我在定义 Excel 工作表本身的结构时遇到了问题。我需要它对用户友好。当名称不唯一时,如何为项目记录定义父项?我是否应该强制用户在层次结构顺序中提供 excel,以便我可以轻松识别子项的父项?

【问题讨论】:

  • 请提供一些示例数据,以便更容易回答您的问题。同时显示相关代码sn-ps。
  • 如果“项目名称在整个列表中不是唯一的”,您如何消除对多次出现的项目名称的引用?也就是说,假设一条名为“foo”的记录有父“bar”,我们找到两条名为“bar”的记录——一条为父“baz”,一条为父“bam”。我们如何知道哪个“bar”是“foo”的父级?
  • @wdf:我没选那个!抱歉,我必须更改 Excel 工作表的结构。
  • 在解析电子表格时,您肯定需要一种方法来明确识别每个项目的父项。我需要有关此数据的含义/用法的更多详细信息,以便对此处的最佳用户体验发表意见,但可以肯定的是,要求电子表格中的条目排序以反映父子关系听起来是一个合理的选择(.. .假设您不能只要求所有名称都是唯一的,这将是最简单的方法)。

标签: java arraylist hashmap hierarchy


【解决方案1】:

你可以用一个简单的

HashMap<Parent, List<Child>> 允许使用每个父键存储多个值 - 只需根据需要将子键附加到键控列表。或者,考虑使用 MultiMap 来保存您的数据。

【讨论】:

    【解决方案2】:

    您可以简单地读取项目一次并创建一个 (name, id) 的 HashMap。
    然后再次迭代这些项目并分配父 id,从 HashMap 中获取它。
    这样,您将仅在项目列表上迭代 2 次,这将使其时间复杂度为 O(n)。

    但是,如果您没有唯一的名称,那么您可能找不到该项目的唯一父项,如果您在项目上只有它的父项名称。

    【讨论】:

    • 除了找到唯一父级的问题(根据我对问题的阅读,这是一个主要问题),您的解决方案假定在分配 id 时所有名称都是唯一的,因为哈希映射可以给定名称只包含一个 id。
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2016-03-08
    • 2015-07-29
    • 1970-01-01
    • 2016-10-09
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多