所以我有一个具有以下格式的任意长度的文件:
@HEADER1
//arbitrary lines of data
@HEADER2
//arbitrary lines of data
....
我将提取每个 header 并将其保存在 Hashmap 中,然后我将开始(按顺序)解析另一个文件,该文件是 file1 的超集,例如具有以下格式:
@HEADER1
//arbitrary lines of data
//extended information
@HEADER2
//arbitrary lines of data
//extended information
所以我的想法是,我将构建一个 header 的 HashMap - 遍历文件 1 一次,然后我将遍历文件 2 并在其中的每个 header 上检查它是否在 hasmap 中,如果是的话 - 我会用数据做点什么。所以我想知道这是否是一个最佳解决方案 - 根据我的脑后计算,这将是 O(n) 而如果我有一个数组列表并且对于文件 2 中的每个标题检查它是否也在arraylist 会产生 O(n^2) 而 N 是 Arraylist 中标题的数量 - 我是否正确?
如果有更有效的方法,我很乐意领导它。
编辑:
我不能保证文件头的顺序是相同的,只是文件 1 中的内容应该存在于文件 2 中。另外 - 我真的不需要为 VALUE 保存任何东西,在这种情况下我只需要快速访问 key 。
最佳答案
HashMap 是一个非常好的选择。
所以接下来要考虑的是 HashMap 将存储什么。键可能是一个字符串,并且是 "@HEADER###"
.但是数据呢?
对于 HashMap 中的值,您有几个选项。您可以使用字符串,但需要花一些时间仔细考虑您的数据是什么。它是原始数据行和您要添加的扩展信息吗?该数据是否代表结构化的东西?喜欢元素 list 吗?
如果您发现自己从 map 中获取了一个字符串值并进行了额外的处理,请考虑将该字符串替换为一个更能代表您的数据的类,这样您就可以得到类似于 HashMap<String, DoskiasData>
的值。 .
关于java - 这是 HashMap 的正确用例吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903924/