首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:可调整大小的Arraylist不会保持并行

Java:可调整大小的Arraylist不会保持并行
EN

Stack Overflow用户
提问于 2016-03-02 01:26:07
回答 2查看 73关注 0票数 1

我有一种情况,我的“代理”对象包含大量数据,包括图形、物理以及现在的ai。

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

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

我曾经问过这个问题,有人告诉我,拥有多个方法实例不会影响性能或内存膨胀,所以这不应该是一个问题。

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

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

有没有更好的方法来解决这个“平行错配”问题。

Edit>>>

我知道我可以把所有的数据都填充到agent类中。据我所知,有一个30页的课程是一个糟糕的oop结构的例子。

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

Edit>>实例

代码语言:javascript
复制
    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(){}
    //....

    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-02 03:17:31

若要创建引用,请尝试

代码语言:javascript
复制
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(){}
    //....

}

至于并行数组,您的示例并没有提供足够的细节来演示您想要做的事情。

//伪代码,表示我所需要的(是的,类声明顺序是错误的)

您的意思是在定义Agent之前定义ai_modulegraphics_module是错误的吗?事实并非如此。java编译器对此没有异议。

您可能应该阅读基本的java教程。我认为它将解决你的许多问题。

票数 1
EN

Stack Overflow用户

发布于 2016-03-02 01:33:20

并行数组是在Basic和Fortran是现代语言时发展起来的一种60年代的结构。这些语言没有其他数据结构。

自20世纪90年代以来,在OO开发中,如果您有几种不同类型的数据属于一起,则创建一个对象来保存对这些数据位的引用,这样您就不需要担心任何并行的事情。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35736796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档