假设我有一个简单的 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/