我有一个如下所示的数据集
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中),它可以以键值对的方式保存每行中对的列表。
目标和假设:
注意: - 我已经了解HashMap及其在java中的内部实现。我只是想避免这种特殊类型数据集的结构开销:)
目的是通过传递密钥以恒定时间获取给定行中任何属性的值。 我将一次只处理一行,我想在该行中获得say attr1的值,如果它是真的做某事。希望这说清楚。
我只有两个想法
列出一份 将对象与键,值作为实例变量配对并执行二进制 在排序列表中搜索O(logn)+一段时间 等于检查
我在寻找是否有比这更好的方法:)对此有何想法/想法?
答案 0 :(得分:3)
结构性开销是多少? HashMap将为您提供恒定的时间查找,您不关心调整大小,而且您不必像已经完成的那样编写/测试实现。
我在几十个应用程序中使用了HashMap,除非你正在处理大规模的规模,否则我没有理由让你推出自己的实现或去寻找另一个。
我还应该补充一点,使用通用结构可以让您的代码更容易被其他人访问。大多数Java开发人员都了解SDK HashMap实现及其权衡。如果他们遇到您自己的实现或其他一些库实现,他们将不得不经历重新学习结构是什么以及权衡取舍的过程。
答案 1 :(得分:1)
假设您的密钥始终相同,最有效的解决方案是创建表示每种类型数据的类。
public class Type1 {
private String attr1;
private String attr2;
// etc
}
如果由于某种原因您无法将数据类型表示为类,请使用具有固定键的java.util.Map
实现,例如java.util.EnumMap
。
答案 2 :(得分:0)
假设每组中已知的一组键和键将按相同的顺序排列。如果它的顺序不同,在解析和创建数据结构时,请按相同的顺序放置。