这是一个正确的hashmap用例

时间:2011-10-26 14:13:09

标签: java performance algorithm hashmap complexity-theory

所以我有一个任意长度的文件,格式如下:

@HEADER1
//arbitrary lines of data
@HEADER2
//arbitrary lines of data 
....

我将提取每个标头并将其保存在Hashmap中,然后我将开始解析(顺序)另一个文件,该文件是file1的超集,例如具有以下格式:

@HEADER1
//arbitrary lines of data
//extended information
@HEADER2
//arbitrary lines of data
//extended information

所以我的想法是我将构建一个标题的哈希映射 - 一次通过文件1然后我将通过文件2并在其中的每个标题上我将检查我是否在hasmap中有它如果是 - 我会对数据做些什么。所以我想知道这是否是一个最佳解决方案 - 根据我的头脑计算,这将是O(n)而如果我有一个arraylist和文件2中的每个标题检查它是否也在arraylist会产生O(n ^ 2),而N是Arraylist中的标题数 - 我是否正确?

如果有一种更有效的方式,我会很高兴领导它。

编辑:

我无法保证标头的顺序只与file2中的文件1中的内容相同。另外 - 我真的不需要为VALUE保存任何东西,在这种情况下我只需要快速访问密钥。

4 个答案:

答案 0 :(得分:1)

HashMap是一个非常好的选择。

接下来要考虑的是HashMap将存储的内容。密钥可能是一个字符串,可能是"@HEADER###"。但是数据呢?

您可以在HashMap中选择一些值。您可以使用String,但需要花些时间考虑一下您的数据。它是原始数据行和您添加的扩展信息吗?这些数据是否代表结构化的东西像项目清单一样?

如果您发现自己从地图中获取字符串值并进行其他处理,请考虑将该字符串替换为更能代表您的数据的类,以便您拥有类似HashMap<String, DoskiasData>的内容。

答案 1 :(得分:0)

以您描述的方式使用HashMap正是我将如何处理此问题。

答案 2 :(得分:0)

真的,它正确使用了什么,除非它最终成为性能瓶颈。是的,你是对的,它更快地使用遍历文件2中每个标题的列表的哈希映射。现在,如果标题是有序的,你可以使用列表并获得一个更清洁的解决方案,因为你不需要每次迭代。

答案 3 :(得分:0)

如果可以保证文件的格式,这取决于循环队列也可以正常工作。您需要创建一个由X字符串和标题组成的对象。