Java 使用两个hashmap重用对象

Java 使用两个hashmap重用对象,java,android,hashmap,Java,Android,Hashmap,我想在我的应用程序中使用两个hashmap对池进行更简单的验证——一个是活动对象,另一个是死亡对象 我有一个生成活动对象并将其放置在hashmap中的函数,如果它们死亡,它会将其从hashmap中删除。这会导致大量对垃圾回收器的调用,并导致大量ram的使用量只会增加。相反,我想到了解决方案,创建了两个如下的hashmap: ConcurrentHashMap<Point, Mob> spawned = new ConcurrentHashMap<Point, Mob&

我想在我的应用程序中使用两个hashmap对池进行更简单的验证——一个是活动对象,另一个是死亡对象

我有一个生成活动对象并将其放置在hashmap中的函数,如果它们死亡,它会将其从hashmap中删除。这会导致大量对垃圾回收器的调用,并导致大量ram的使用量只会增加。相反,我想到了解决方案,创建了两个如下的hashmap:

    ConcurrentHashMap<Point, Mob> spawned = new ConcurrentHashMap<Point,  Mob>();
    ConcurrentHashMap<Point, Mob> died = new ConcurrentHashMap<Point, Mob>();
生成的ConcurrentHashMap=新ConcurrentHashMap(); ConcurrentHashMap=新的ConcurrentHashMap(); 将一个死对象放在死hashmap中,例如:

        MobSpawnedEntries1 = spawned.entrySet().iterator();
        while (MobSpawnedEntries1.hasNext()) {
            Map.Entry<Point, Mob> entry = MobSpawnedEntries1.next();
            if(entry.getValue().isDead()){
                died.put(entry.getKey(), entry.getValue());
                MobSpawnedEntries1.remove();
            }
        }
mobsawnedEntries1=spawned.entrySet().iterator();
while(mobpowneddentries1.hasNext()){
Map.Entry=mobsawnedEntries1.next();
if(entry.getValue().isDead()){
died.put(entry.getKey(),entry.getValue());
mobsawnedEntries1.remove();
}
}
在此之后,在spawn函数中,我检查了“dead”hashmap是否为空,如果不是,我只是重新启用了对象并将其放置在派生的hashmap中,还将其从dead hashmap中删除

    if (diedEntries.hasNext()) {
        Map.Entry<Point, Mob> entry = diedEntries.next();
        Point p=entry.getKey();
        Mob b=entry.getValue();
        b.Reset();
        p.x=...;
        p.y=...;
        spawned.put(p,b);
        diedEntries.remove();
    }
if(diedEntries.hasNext()){
Map.Entry=diedEntries.next();
p点=entry.getKey();
Mob b=entry.getValue();
b、 重置();
p、 x=。。。;
p、 y=。。。;
产卵。放置(p,b);
Diedertries.remove();
}
问题是:
这导致了一些奇怪的错误,比如所有的实体都变得相同,变成了最新生成的实体,当一个实体死了,它们也都死了,诸如此类的东西——就像所有实体之间都有连接一样。我认为这是关键,所以我只是为每个实体创建了一个新的点,而不是放置旧的关键,但错误仍然存在。为什么?有什么更好的解决方案(如果需要在池中使用,如果有人能告诉我如何使用,我会很高兴的-我从来没有使用过池或知道如何使用它)。

请发布有效代码,例如
if(entry.isDead()){
无效,因为
entry
是一个
映射。entry
@AndyTurner抱歉,已修复。@AndyTurner Point是一个普通点..而Mob是我用许多功能和位图创建的一个类。如果没有访问
Point
Mob
的实现,很难提供帮助,但我想:可能是你(没有)实现
equals()
hashCode()
在这两个类中?也许你有一些静态字段,它们不应该是静态的?你需要在
地图中保留死值吗?你是否将
点的坐标设置为相同的值,例如
0,0
?这意味着你在死图中只保留了一个东西,因为你是始终使用相同的键添加值。某种类型的
队列
可能是另一种选择。