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

Java: Resizable Arraylists are won't stay parallel

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

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

说实话,代理 class 已经有 10 页了,将 ai 方法和数据包含在一个单独的对象中是非常明智的。当然,这个问题的一个问题是这些方法在某种程度上将是 'reproduced',因为我不需要一个 ai 对象来接受和处理来自许多代理的数据,我需要每个代理一个 ai 对象对象。

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

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

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

有没有更好的方法来解决这个'parallel mismatching'问题。

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

我的问题是,如何创建一个 /reference/ 以存储在代理 class 中,同时将所有 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 的发展,如果您有几种不同类型的数据,您可以创建一个对象来保存对这些数据位的引用,这样您就不必担心并行任何事情。

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

要创建参考,请尝试

public class Agent{

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

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

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

}

至于您的并行数组,您的示例并没有真正提供足够的细节来演示您正在尝试做什么。

//pseudo code that represents what I need (yes the class declaration order is wrong)

你的意思是先定义Agent再定义ai_modulegraphics_module是错误的吗?不是。 java 编译器对此没有问题。

您或许应该学习基本的 java 教程。我认为它将解决您的许多问题。