首页 > 解决方案 > 添加到 Android Studio 中的列表,性能问题

问题描述

几天前我发了这篇文章:Android Studio 中的 For-Each 循环问题

我进行了使用迭代器从 ArrayList 中删除对象的建议更改,并且删除项目的性能问题停止了。下面是更新的 update() 方法:

public void update(){
        float elapsedTime = (startTime - System.currentTimeMillis());
        startTime = System.currentTimeMillis();

        float speed = Constants.SCREEN_HEIGHT/10000.0f;


        Iterator<Grass> i = grasses.iterator();
        while(i.hasNext()){
            Grass g = i.next();
            g.incY(speed * elapsedTime);

            if(g.getRect().top > Constants.SCREEN_HEIGHT){
                int currY = 0;
                int currX = g.getRect().left;
                i.remove();
                grasses.add(new Grass(currX, currY));

            }
        }
    }

populateGrass 方法是一样的:

 private void populateGrass() {
       for(int j = 0; j < ((double) Constants.SCREEN_HEIGHT / grassSize) + 1; j++) {
           yStart = grassSize * (-2 + j);
           for (int i = 0; i < (double) Constants.SCREEN_WIDTH / grassSize; i++) {
                xStart = i * grassSize;
                grasses.add(new Grass(xStart, yStart));
            }
        }
    }

但是,当我添加新草时,问题转移到了抖动问题。我不认为它的帧率下降(尽管这就是它的样子)。我假设修复将类似于迭代器(即使它没有“添加”方法)。

我正在使用 ArrayList,其他类型的列表会有所帮助吗?此外,我的目标是拥有一个充满无缝放置/移动的草的屏幕。最终我会随着时间的推移改变速度,并为游戏添加更多内容。目前我有完美的行,但产生它们是紧张的。“抖动”的副作用(我假设)是草在错误的 Y 坐标上产卵,它们聚集在一起。

编辑:我忘了提到错误信息是一样的。“并发修改异常”

标签: javaandroidarraylistiterator

解决方案


是的,不同的列表提供不同的实现,只是以不同的速度为不同的功能提供相同的结果。

例如,ArrayList 比 LinkedList 更适合循环。这是因为 ArrayList 属性可以通过索引直接访问,而不是必须遍历节点才能获得指定节点的链表。

TL/DR: - 链表更适合添加/删除功能。- 数组列表更适合获取/设置

我在大学学到了这一点,否则可能需要问同样的问题。

参考: https ://dzone.com/articles/arraylist-vs-linkedlist-vs


推荐阅读