我有一个如下所示的数据集
attr1=val1 | attr2=val2 | attr3=val3 | attr4=val4 | attr5=val5,
attr1=val21 | attr2=val22 | attr3=val23 | attr4=val24 | attr5=val25,
attr1=val31 | attr2=val32 | attr3=val33 | attr4=val34 | attr5=val35,
键和值由 = 和 | 分隔(从空格更改以避免混淆)是对的分隔符。我可以负责解析/标记输入,但我关心的是存储数据。 我正在寻找一种数据结构(最好是在java中),它可以以键值对的方式保存这些每行中的对列表。
目标和假设:
- 输入键将是唯一的 - 不会有任何重复的键,所以 如果散列码有助于持续查找,则可以在设计中使用散列码,无需处理散列码 碰撞
- 应该可以通过将 key 作为输入传递来在恒定时间内访问值
- 一行中的对数始终相同,因此无需担心数据结构的动态调整大小
- 我们将使用 key 一次访问一行并获取 对应值
注意:- 我已经知道 HashMap 及其在 java 中的内部实现。我只是想避免这种特定类型的数据集的结构开销:)
目的是通过传递 key 在恒定时间内获取给定行中的任何属性的值。 我一次只处理一行,我想获取该行中 attr1 的值,如果它是 true 则执行某些操作。希望这能让大家清楚。
我只有两个想法
- 使用 HashMap 是最明显的解决方案
有一个列表 将对象与键、值配对作为实例变量并执行二进制操作 在 O(logn) + 一些时间的排序列表中搜索 等于检查
我正在寻找是否有比这更好的方法:)对此有什么想法/想法吗?
最佳答案
什么结构开销? HashMap 将为您提供恒定时间的查找,您不关心调整大小,而且您不必编写/测试实现,因为它已经完成了。
我已经在数十个应用程序中使用了 HashMap,除非您正在处理大规模的问题,否则我认为您没有任何理由推出自己的实现或去寻找另一个实现。
我还应该补充一点,使用通用结构可以让其他人更容易访问您的代码。大多数 Java 开发人员都了解 SDK HashMap 实现及其权衡。如果他们遇到您自己的实现或其他一些库的实现,他们将必须经历重新学习结构是什么以及权衡是什么的过程。
关于java - 用于存储键值对的新数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072401/