java - 对于以变量集作为键的映射,我应该使用什么数据结构?

标签 java data-structures

我的数据集如下所示:

Task-1, Priority1, (SkillA, SkillB)
Task-2, Priority2, (SkillA)
Task-3, Priority3, (SkillB, SkillC)

调用应用程序(客户端)将发送技能列表 - 例如(SkillD、SkillA)。

查找:

  1. 首先在数据集中搜索 SkillD,但没有找到任何内容。
  2. 搜索技能A。我们将找到两个条目 - Task-1 具有 Priority1,Task-2 具有 Priority2。
  3. 确定具有最高优先级的任务(在本例中为 Task-1)
  4. 从该数据集中删除 Task-1 并将 Task-1 返回给客户端

设计考虑:

  • 网站上线后会对数据集进行大量添加/更新/删除
  • 只有很少的技能,但不是静态列表(大约 10 个),但对于每个技能,可以有数千个任务。因此,查找/检索必须非常快

我考虑过使用binarySearch(比较器)或Map(技能,SortedSettasks(任务))的简单列表,但正在寻找更多想法。

为此类数据集设计数据结构的最佳方法是什么,该数据结构允许使用复杂的键以及与该键关联的已排序任务数组。

最佳答案

稍微改变一下方法怎么样? 您可以使用 Guava和一个Multimap特别是。

Every experienced Java programmer has, at one point or another, implemented a Map<K, List<V>> or Map<K, Set<V>>, and dealt with the awkwardness of that structure. For example, Map<K, Set<V>> is a typical way to represent an unlabeled directed graph. Guava's Multimap framework makes it easy to handle a mapping from keys to multiple values. A Multimap is a general way to associate keys with arbitrarily many values.

从概念上考虑 Multimap 有两种方法:作为从单个键到单个值的映射的集合:

我建议您使用 Multimap 并通过 Multimap 引入的强大功能 Views 来解决您的问题。

祝你好运!

关于java - 对于以变量集作为键的映射,我应该使用什么数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37211366/

相关文章:

java - List<List<String>> 是 Collection<Collection<T>> 的实例吗?

java - Lucene 中的查询

c++ - C++ 中的顶点类

java - 如何在 Java 中将新的 Listing 对象添加到数组的下一个索引处?

c++ - 在 C++ 中预热一些变量

java - Android getDisplayMetrics() 未返回准确的显示尺寸

c# - 检查异常的优缺点是什么?

java - 在 swing jtable 中的行数之后插入行或记录

python - 循环队列 Python

algorithm - 这篇关于DFS算法的帖子对吗?