循环访问数组列表Java
我正在阅读Excel工作表中的项目列表。每个项目名称都有一个来自同一列表的父项目名称(作为单独的列)。因此,这形成了一个树形层次结构,其中一个项目是另一个项目的父项目,并且同一个列表中还有多个子项目。 项目名称在整个列表中并不唯一。 项目在一个特定的父项下是唯一的。循环访问数组列表Java
每个项目的Id在从输入文件读取时生成。 现在我想要为每个项目获取其父项的Id。
对于从文件中读取的当前记录,父项可以出现在我们尚未读取的行的下方,因此我们不知道其父项的标识。
当我想到一个逻辑,它会导致循环访问数组列表和hashmap键集来获取它。
我需要帮助来获得更好的逻辑来解决这个问题。提前致谢!
EDIT 1:
现在我在限定的Excel工作表本身的结构有问题。我需要它是用户友好的。当名称不唯一时,我如何定义项目记录的父项?我是否应该强制用户在层次结构顺序中提供excel,以便我可以轻松识别子项目的父项?
您可以简单地阅读一次项目并创建(name,id)的HashMap。
然后再次迭代项目并分配父ID,从HashMap中获取它。
通过这种方式,您只需在项目列表上迭代2次,这会给它的时间复杂度为O(n)。
但是,如果您没有唯一的名称,则可能有可能找不到某个项目的唯一父项,如果您的项目上只有它的父项名称。
除了寻找一个独特的父母(根据我对问题的阅读是一个主要问题)的问题之外,您的解决方案假定所有名称在分配ID时都是唯一的,因为哈希映射只能包含给定的一个ID名称。 – wdf 2015-02-23 16:16:01
你可以使用一个简单的
HashMap<Parent, List<Child>>
允许多个值存储与每个父键需要对键列表-simply追加孩子。或者,考虑使用MultiMap来保存您的数据。
请提供一些示例数据,以便更容易地回答您的问题。还显示相关的代码片段。 – CKing 2015-02-23 15:27:07
如果“项目名称在整个列表中不是唯一的”,那么如何消除对多次出现的项目名称的引用歧义?也就是说,假设名为“foo”的记录具有父级“bar”,并且我们找到两个名称为“bar”的记录 - 一个父级为“baz”,另一个为父级“bam”。我们如何知道哪个“酒吧”是“foo”的父母? – wdf 2015-02-23 16:13:08
@wdf:我没有选那个!对不起,我必须更改Excel工作表的结构。 – 2015-02-24 08:33:58