Java:可调整大小的数组列表不会保持平行

标签 java pointers arraylist dynamic-arrays parallel-arrays

我的“代理”对象包含大量数据,包括图形、物理,现在还有 ai。

我之前在并行的单独对象中编写这些“代理”的组件。现在我意识到,由于代理包含在一个可调整大小的 ArrayList 中,如果其中一个代理被销毁,索引将不再与 ai 组件平行。

说实话,代理类已经有 10 页长了,将 ai 方法和数据包含在一个单独的对象中是非常明智的。当然,与此相关的一个问题是这些方法将以某种方式“复制”,因为我不需要一个 ai 对象来接受和处理来自许多代理的数据,每个代理对象都需要一个 ai 对象。

我曾经问过这个问题,被告知拥有多个方法实例对性能或内存膨胀没有影响,所以这不应该成为问题。

我不确定如何解决这个问题,除非可能在代理对象和 ai 对象中存储一个 agent_id,然后在我需要调用它们时在每个列表上运行搜索。不用说,这是明智的做事方式。

在 C++ 中,这个问题的简单解决方案是一个指针,其中指向正确 ai 实例的指针将包含在代理数据中。我不知道该怎么做,所以我最好的解决方案是将更多数据塞入代理对象并将其作为参数传递给 ai 对象。

有没有更好的方法来解决这个“并行不匹配”问题。

编辑>>>
我知道我可以将所有数据塞入代理类。我被教导的是,有 30 页的类(class)是糟糕的 oop 结构的一个例子。

我的问题是,如何创建一个/reference/来存储在代理类中,同时将所有 ai 数据封装在 ai 模块中。

编辑>>例子

    public class Agent{

    //pseudo code that represents what I need (yes the class declaration order is wrong)
    AI_ref   = new Reference(ai_module);
    Graphics_ref = new Reference(graphics_module);

    int[][] physics_data; //Like I said, 10 pages of this

    void method1(){}
    void method2(){}
    //....

    }

    public class graphics_module{

    int[][] graphics_data; //this is also about 10 pages

    void method1(){}
    void method2(){}
    //....

    }

    public class ai_module{

    int[][] ai_data; //this will likely span 5ish pages

    void method1(){}
    void method2(){}
    //....

    }

}

最佳答案

并行数组是 1960 年代开发的构造,当时 Basic 和 Fortran 是现代语言。这些语言没有其他数据结构。

自 1990 年代以来,随着 OO 的发展,如果您有多种不同类型的数据,您可以创建一个对象来保存对这些数据位的引用,这样您就不必担心任何并行问题。

我强烈建议您将代码重构为现代最佳实践并使用对象。由于您没有提供明确的详细信息,因此这是可以给出的最明确的答案。

关于Java:可调整大小的数组列表不会保持平行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35736796/

相关文章:

java - re.findall 从 python 到 Java 匹配、模式

java - 在其他链表组中查找链表组

c - 以相反的顺序打印双向链表?

c++ - 是否对未指向序列未定义行为中的元素的指针递增/递减或添加整数值?

java - ArrayList 实现中的 oldData

Java - 包含检查数组列表中的所有项目是否满足条件

java - 访问 Lucene 4 中的术语统计信息

java - Foreach 协助使用类变量?

c++ - 指针的 const 说明符

Java List<?> 设置方法