【问题标题】:prepopulating ArrayList with massive data set in java用java中的海量数据集预填充ArrayList
【发布时间】:2018-05-26 06:58:11
【问题描述】:

我正在尝试制作一个玩家只能在他们周围小范围内看到的游戏。我试图通过覆盖 500X500 显示器和 1X1 黑色像素来做到这一点,我可以将其设置为活动或非活动。问题在于,当程序启动时,使用标准 for 循环添加它们需要大量时间,并且会减慢整个过程。有什么解决办法吗?

pix 对象有两个参数(int x, int y)

代码

public ArrayList<Pix> pixs= new ArrayList<>();

for(int i = 0; i<=500; i++)
{
    for(int ii = 0; ii<=500; ii++)
    {
        pixs.add(new Pix(ii,i));
    }
}

【问题讨论】:

  • 您确定减速是这种循环而不是它的处理方式吗?您也可以尝试对循环进行分区并并行运行多个部分。
  • 不要对循环说坏话。 (你的意思是“标准”而不是“诽谤”?)
  • 你的 Pix 类是什么样的。您正在构建 250000 个 PIx 实例,因此这可能需要一些时间。根据类的外观,您可能可以使用原语来代替。
  • 例如,如果您的所有 Pix 类都包含 2 个整数,即 x 和 y,请考虑使用一个二维布尔数组。例如boolean[][] pixs = new boolean[500][500];
  • 旁注(尽管与构建所有实例相比可能可以忽略不计):由于您事先知道列表的大小,因此可以使用适当的容量new ArrayList&lt;&gt;(500*500)对其进行初始化。这将避免动态增长列表的开销。

标签: java optimization arraylist


【解决方案1】:

您正在构建 Pix 类的 250000 个实例。这需要一些时间。

考虑改为使用二维布尔数组。其中 false 表示像素为黑色。

您不需要自己初始化这些值,因为它们将默认为 false。

    boolean[][] pixs = new boolean[500][500];

你可以用这个来迭代结构:

    for (int x = 0; x < 500; x++) {
        for (int y = 0; y < 500; y++) {
            System.out.println(pixs[x][y]);
        }
    }

您可以使用

设置特定的像素
    int x = 232;
    int y = 455;
    pixs[x][y] = true;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2012-03-17
    • 2011-09-21
    • 2014-08-30
    相关资源
    最近更新 更多