Java 结合对象理解ArrayList

Java 结合对象理解ArrayList,java,processing,Java,Processing,我正在尝试在屏幕上单击鼠标时创建自己的粒子效果(简单)。我不认为这门语言相关(但我还在学习) 我的逻辑是否正确: 每次单击时,粒子都会添加到ArrayList中,以进行迭代以增加大小、颜色和不透明度 现在,如果我在屏幕上多次单击,这仍然有效,因为每组粒子都将简单地添加到ArrayList 但是,这似乎并不有效,因为当第一次粒子爆炸结束时,ArrayList中不再需要它,并且不应占用内存 有人能帮我解释一下逻辑吗? 动画PNG系列会比动态创建自己的粒子效果更有效吗 谢谢 PS-我不是在创建游戏/应

我正在尝试在屏幕上单击鼠标时创建自己的粒子效果(简单)。我不认为这门语言相关(但我还在学习)

我的逻辑是否正确:

每次单击时,粒子都会添加到ArrayList中,以进行迭代以增加大小、颜色和不透明度

现在,如果我在屏幕上多次单击,这仍然有效,因为每组粒子都将简单地添加到ArrayList

但是,这似乎并不有效,因为当第一次粒子爆炸结束时,ArrayList中不再需要它,并且不应占用内存

有人能帮我解释一下逻辑吗? 动画PNG系列会比动态创建自己的粒子效果更有效吗

谢谢


PS-我不是在创建游戏/应用程序…只是在尝试我正在学习的概念

你应该删除过期的粒子效果。为此,可能更适合使用LinkedList,因为您可以对其进行迭代并在固定时间内删除任何过期的元素。ArrayList和LinkedList都实现了列表接口,因此如果在代码中使用列表,它可以接受其中任何一个。小心避免链接列表上的索引访问,因为它很慢;尽可能为每个循环使用迭代器

Iterator<ParticleBlast> itr = particles.iterator();
while(itr.hasNext())
{
    ParticleBlast next = itr.next();
    if(next.hasExpired()) itr.remove();
}
Iterator itr=particles.Iterator();
while(itr.hasNext())
{
刨花板下一个=itr.next();
如果(next.hasExpired())itr.remove();
}

让粒子过期怎么样

class Particle
{
    static final long EXPIRE_TIME = 2000; // 2 seconds

    final long expireTime;

    public Particle ()
    {
        expireTime = System.currentTimeMillis() + EXPIRE_TIME;
    }
}

SortedSet<Particle> particles = new TreeSet<>(new Comparator<Particle>{
    public compare (Particle a, Particle b)
    {
        if(a.expireTime < b.expireTime)
            return -1;
        if(a.expireTime > b.expireTime)
            return 1;
        return a.hashCode() - b.hashCode();
    }
});
类粒子
{
静态最终长过期时间=2000;//2秒
最后的长过期时间;
公共粒子()
{
expireTime=System.currentTimeMillis()+过期时间;
}
}
SortedSet粒子=新树集(新比较器{
公共比较(粒子a、粒子b)
{
if(a.expireTimeb.到期时间)
返回1;
返回a.hashCode()-b.hashCode();
}
});
然后可以使用add方法将粒子添加到“粒子”集中。每隔一段时间,就像每次更新视图一样,从集合前面移除所有已过期的粒子(其expireTime字段小于System.currentTimeMillis)