有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

谢谢


共 (3) 个答案

  1. # 1 楼答案

    I have an very large array of objects where objects are constantly added and every object is dynamic and contains different parameters that define it (getParam1() etc..).

    {}是一种静态结构。如果要不断地向其中添加元素,应该重新考虑使用动态集合,例如ListSetMap。如果不修改数组的长度,而只是更新数组上的不同对象,则可以。尽管如此,您仍必须跟踪(索引、对象数量等)阵列的当前状态,因为您需要知道将对象放置在何处

    I need a data type that allows me to point directly to an object in the array that contains a specific parameter without having to index through the entire array every time that I require a specific object.

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

    我想说的是,与其使用array,不如尝试使用Map,其中键是参数,值是Set,包含与该参数相关的不同对象

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

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

    I've looked into maps but it's not really ideal when it comes to my objects.

    我不知道您当前的上下文以及如何识别对象。如果您有一个ID或任何类型的唯一标识断言,您可以将Map{}中的Map转换为MapMap,在那里您可以获得一个包含与某个函数关联的对象的映射,然后通过该ID获得一个特定的对象

    最后,如果没有足够的东西,您应该创建一个满足您需求的结构。不过,对于即时访问,您最好使用Map或经过充分润滑的array

  2. # 2 楼答案

    使用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();
    
  3. # 3 楼答案

    您可以为每个参数维护一个映射,并在参数更改时更新每个映射。如果您无法控制突变类或可变类,那么除了通过对象进行线性搜索之外,您无法做其他事情