我的arraylist正在为自己添加数千个对象

时间:2014-02-14 08:32:32

标签: java arraylist

我做了System.out.println的{​​{1}}并且它返回了数千的int,随着时间的推移很快就会上升。我正在做一个Java applet,它创建tile并随机为ArrayList中的每个点生成对象变量。

我不知道为什么会这样,但我可以定期清除数组列表,但我不应该这样做。

tileList.size()

调用它
col = 20;
row = 10;

public void createTiles()
{
    for (int i = 0; i <= col; i++)
    {
        for (int j = 0; j <= row; j++)
        {
            if (r.nextInt(100) >= slides / 2)
            {
                tileList.add(new Tile(i * 64, j * 64, this.getHeight(), this.getWidth(), false, 0, false));
            }

            if (r.nextInt(100) <= slides / 2)
            {
                tileList.add(new Tile(i * 64, j * 64, this.getHeight(), this.getWidth(), true, 0, false));
            }

            if (r.nextInt(500) <= 1)
            {
                tileList.add(new Tile(i * 64, j * 64, this.getHeight(), this.getWidth(), false, 0, true));
            }
        }
    }
}

3 个答案:

答案 0 :(得分:3)

java Applet's Paint方法中被无限次调用以为用户提供一致的UI,只需在Paint中添加System.out.println()即可尝试。 因此,请避免在Paint内调用这些方法。

答案 1 :(得分:0)

看起来tileList是您的类的成员,当您调用createTiles()时,您可以将Tiles添加到此列表中。如果多次调用createTiles(),则Tiles将添加多个时间。我认为你骂了

tileList = new ArrayList();

tileList.clear();

在createTiles()方法的第一行重新初始化或清除。

答案 2 :(得分:0)

您应该使用createTiles()init()方法调用create()方法。您的列表包含非常多的磁贴,因为在applet中,始终会调用paint()方法。此外,您不应该覆盖paint()方法。在基于swing的程序中,建议您改为覆盖paintComponent()方法。

Applet正在变老,未来的Java版本将无法支持它们。我建议切换到应用程序。