用于存储键值对的新数据结构

时间:2015-01-21 16:42:37

标签: java data-structures

我有一个如下所示的数据集

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中),它可以以键值对的方式保存每行中对的列表

目标和假设:

  1. 输入键将是唯一的 - 不会有任何重复键,所以 如果哈希代码有助于常量查找,则可以在设计中使用哈希代码,无需处理哈希代码 碰撞
  2. 通过传递键作为输入
  3. ,可以在恒定时间内访问值
  4. 一行中的对没有总是相同的,所以不需要为数据结构的动态调整大小而烦恼
  5. 我们将使用密钥访问一行,然后获取 对应值
  6. 注意: - 我已经了解HashMap及其在java中的内部实现。我只是想避免这种特殊类型数据集的结构开销:)

    目的是通过传递密钥以恒定时间获取给定行中任何属性的值。 我将一次只处理一行,我想在该行中获得say attr1的值,如果它是真的做某事。希望这说清楚。

    我只有两个想法

    1. 使用HashMap是最明显的解决方案
    2. 列出一份     将对象与键,值作为实例变量配对并执行二进制     在排序列表中搜索O(logn)+一段时间     等于检查

      我在寻找是否有比这更好的方法:)对此有何想法/想法?

3 个答案:

答案 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)

假设每组中已知的一组键和键将按相同的顺序排列。如果它的顺序不同,在解析和创建数据结构时,请按相同的顺序放置。 enter image description here