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

标签 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. 应该可以通过将 key 作为输入传递来在恒定时间内访问值
  3. 一行中的对数始终相同,因此无需担心数据结构的动态调整大小
  4. 我们将使用 key 一次访问一行并获取 对应值

注意:- 我已经知道 HashMap 及其在 java 中的内部实现。我只是想避免这种特定类型的数据集的结构开销:)

目的是通过传递 key 在恒定时间内获取给定行中的任何属性的值。 我一次只处理一行,我想获取该行中 attr1 的值,如果它是 true 则执行某些操作。希望这能让大家清楚。

我只有两个想法

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

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

最佳答案

什么结构开销? HashMap 将为您提供恒定时间的查找,您不关心调整大小,而且您不必编写/测试实现,因为它已经完成了。

我已经在数十个应用程序中使用了 HashMap,除非您正在处理大规模的问题,否则我认为您没有任何理由推出自己的实现或去寻找另一个实现。

我还应该补充一点,使用通用结构可以让其他人更容易访问您的代码。大多数 Java 开发人员都了解 SDK HashMap 实现及其权衡。如果他们遇到您自己的实现或其他一些库的实现,他们将必须经历重新学习结构是什么以及权衡是什么的过程。

关于java - 用于存储键值对的新数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072401/

相关文章:

java - JButton 不响应单击事件

JavaFx2 IllegalStateException 与 Label.setText

c - 展开链表数组与节点

用于嵌入式系统的 C++ 数据容器

c - 初始化 Valgrind 错误

java - 在多线程环境中使用 HttpClient 的最佳实践

java - 使用 Java Web Start 下的 FileChoosers、JNLP API 来选择文件

c - 链表问题 - 循环迭代错误的节点

c++ - 我正在尝试使用队列实现 bfs。有人可以帮我找到错误吗?

java - 如何从 Java 中的文本文件中读取逗号分隔值?