Java:可调整大小的Arraylists不会保持平行

时间:2016-03-02 01:26:07

标签: java pointers arraylist dynamic-arrays parallel-arrays

我的情况是我的'代理'对象包含大量数据,包括图形,物理,现在也是ai。

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

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

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

我不知道如何解决这个问题,除非可能在代理对象和ai对象中存储agent_id,然后在需要调用它们时在每个列表上运行搜索。毋庸置疑,这是表现明智的可怕方式。

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

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

编辑>>>
我知道我可以将所有数据填充到代理类中。我所教的是,有一个30页的课程是糟糕的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(){}
    //....

    }

}

2 个答案:

答案 0 :(得分:4)

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

从20世纪90年代开始进行OO开发,如果你有几种不同类型的数据,你可以创建一个对象来保存对这些数据位的引用,这样你就不用担心并行了什么。

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

答案 1 :(得分:1)

要创建参考文献,请尝试

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_module并且graphics_module是错误的吗?不是。 java编译器没有问题。

你应该通过一个基本的java教程。我认为它将解决你的许多问题。