0

我有一个非常大的对象数组,其中不断添加对象,每个对象都是动态的,并且包含定义它的不同参数(getParam1()等)。

我需要一种数据类型,它允许我直接指向数组中包含特定参数的对象,而无需在每次需要特定对象时对整个数组进行索引。

是否有任何数据类型在 java 中提供此功能,还是我必须创建自己的?在那种情况下,我该怎么做?

谢谢。

4

3 回答 3

1

我有一个非常大的对象数组,其中不断添加对象,每个对象都是动态的,并且包含定义它的不同参数(getParam1()等)。

Anarray是一个静态结构。如果您要不断向其中添加元素,您应该重新考虑使用动态集合,例如 a List、 aSet或 a Map。如果您没有修改数组的长度,而只是更新其上的不同对象,那么您就可以了。尽管如此,您仍然必须跟踪(索引、对象数量等)数组的当前状态,因为您需要知道将对象放在哪里。

我需要一种数据类型,它允许我直接指向数组中包含特定参数的对象,而不必在每次需要特定对象时对整个数组进行索引。

这将需要某种中间逻辑。如果您指向具有特定参数的对象,如果多个对象具有该参数,会发生什么情况?你必须定义哪一个是正确的。另一方面,如果您指向参数,您仍然需要知道相关对象。

我想说的是,而不是使用 anarray您应该尝试使用 a Mapwith 条目,其中键是参数,值是 a Set,包含与该参数相关的不同对象。

Map如果您只将参数映射到一个对象,A就足够了,但我将介绍更复杂的情况,以防万一。

请注意,一个对象可以存在于多个Sets 中,因为需要两个参数才能将其映射两次才能找到它。

我查看了地图,但对于我的对象来说并不是很理想。

我不知道您当前的上下文以及您如何识别您的对象。如果您有 ID 或任何类型的唯一身份断言,您可以将Mapof Sets 转换为 aMapMaps,您可以在其中获取包含与某个函数关联的对象的 Map,然后通过该 ID 获取特定对象。

最后,如果还不够,您应该创建一个满足您需求的结构。不过,为了即时访问,你最好使用一个Map或一个非常好的array.

于 2013-01-20T02:08:16.260 回答
1

您可以为每个参数维护一个映射,并在参数更改时更新每个映射。如果您无法控制 mutating 或 mutable 类,那么除了线性搜索对象外,您无能为力。

于 2013-01-20T01:45:44.523 回答
0

使用 aMap而不是数组:

Map<String, MyObject> map = new HashMap<String, MyObject>();

MyObject o;
String someId = o.getId();  // use some identifying id for your objec

map.put(someid, o); // do this for all your objects

然后当您需要检索一个时:

MyObject o = map.get(someId);

如果您需要所有对象(可能,但不太可能):

List<MyObject> objects = map.getValues();
于 2013-01-20T02:14:32.847 回答