如何从java中的对象数组中检索特定对象

时间:2013-01-20 01:27:54

标签: java arrays object types

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

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

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

感谢。

3 个答案:

答案 0 :(得分:1)

您可以为每个参数维护一个映射,并在参数更改时更新每个映射。如果你无法控制变异类或可变类,那么除了线性搜索你的对象之外别无他法。

答案 1 :(得分:1)

  

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

array是静态结构。如果您要不断添加元素,则应重新考虑使用动态集合,例如ListSetMap。如果您没有修改数组的长度,并且只是更新其上的不同对象,那么您就可以了。尽管如此,您仍需要跟踪阵列当前状态的跟踪(索引,对象数量等),因为您需要知道放置对象的位置。

  

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

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

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

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

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

  

我查看了地图但是当涉及到我的物体时,它并不是很理想。

我不知道您当前的背景以及如何识别您的对象。如果您拥有ID或任何类型的唯一身份声明,则可以将Map Set转换为MapMap,以获取包含地图的地图与某个函数关联的对象,然后通过该ID获取特定对象。

最后,如果没有足够的东西,你应该创建一个满足你需求的结构。尽管如此,对于即时访问,您最好使用Map或非常精彩的array

答案 2 :(得分:0)

使用Map代替数组:

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();