带有容器对象键的Java Map,通过容器对象字段值查找?

标签 java dictionary key multikey

假设我有一个简单的 Java 对象,我们将其称为 DefinedData。它将包含许多不同类型的最终字段,例如字符串、整数、枚举,甚至可能是一组或两个字符串。总而言之,它只是一个比较简单的数据容器。可能会有 1k 到 2k 个这样的对象,全部是静态最终对象。这些字段中的大多数都是唯一的,因为没有其他 DefinedData 对象具有与该字段相同的值。

这些将被放入(DefinedData,Object)的映射中。现在,如果您有 DefinedData 对象,您可以轻松地从 Map 中获取该对象,但如果您只有唯一字段值之一怎么办?您不能只将其传递给 Map。您必须迭代键并进行检查,这意味着使用 DefinedData 中每个字段的查找方法来包装映射。可行,但不是最漂亮的事情,特别是如果 Map 中有很多值并且有很多查找,这是可能的。要么是这样,要么需要查找 DefinedData 对象,这又是一堆 Maps...

这听起来几乎像是数据库的工作(基于任何列进行查找),但这对于这个特定问题来说并不是一个好的解决方案。我还宁愿避免使用十几个不同的映射,每个映射将单个字段从 DefinedData 映射到对象。我见过的多键映射不适用,因为它们需要所有键值,而不仅仅是一个。是否有 Map、Collections 或其他实现可以处理这个特定问题?

最佳答案

避免拥有多个映射的唯一方法是以某种方式迭代所有 DefinedData 对象。原因是,在发出请求之前,您无法知道如何对它们进行划分或排序。

如果你有一桶苹果,就可以举个例子。任何时候都可能有人过来要求某种颜色、某种类型或某种尺寸。您必须选择按其中一个类别进行排序,而其他类别则必须在所有苹果中进行搜索。 如果你能拥有三组相同的苹果就好了;每个类别一个。

拥有多个映射将是一个更快的解决方案,尽管会占用更多内存,而迭代会更容易实现,速度更慢,并且使用更少的内存。

关于带有容器对象键的Java Map,通过容器对象字段值查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20058695/

相关文章:

javascript - JS通过以字符串开头的键获取对象的值

java - 测量Java中单链表的大小/长度?

java - JTable 插入列而不是行

python - 在 filter() 中使用 has_key() 的最快方法?

java - 如何检查两个二叉搜索树是否具有相同的精确键(忽略值)?

perl - Perl 是否保证返回一致有序的散列键?

java - Intellij 生成的 WSDL 客户端代码

java - 为什么 Java Pattern 类使用工厂方法而不是构造函数?

c++ - 反向映射值 c++

python - 在字典中解包元组