ArrayList.remove() 没有删除对象
ArrayList.remove() is not removing object
我有一个对象为 Player 的 ArrayList。当我尝试从列表中删除该对象时,控制台中没有出现任何错误,但该对象并未被删除。这是因为如果我 System.out.println(ArrayList);我删除对象后,它仍然打印出刚刚删除的对象。
我在这里管理和创建 ArrayList:
public class CreatureManager {
protected Handler handler;
private ArrayList<Creature> creatures;
private final Player player;
public CreatureManager(Handler handler) {
this.handler = handler;
player = new Player(handler, 1280, 720);
creatures = new ArrayList<>();
}
public void addCreature(Creature e) {
creatures.add(e);
}
public void removeCreature(Creature e) {
creatures.remove(e);
}
public void tick() {
for (Creature e : creatures) {
e.tick();
}
}
public void render(Graphics g) {
for (Creature e : creatures) {
e.render(g);
}
}
public Player getPlayer() {
return player;
}
public ArrayList<Creature> getCreatures() {
return creatures;
}
}
ArrayList 中的通用“Creataure”指的是以下内容class:
public abstract class Creature {
protected Handler handler;
protected int x, y;
protected int width, height;
protected Rectangle bounds;
public Creature(Handler handler, int x, int y, int width, int height) {
this.handler = handler;
this.x = x;
this.y = y;
this.width = width;
this.height = height;
bounds = new Rectangle(0, 0, width, height);
}
public abstract void tick();
public abstract void render(Graphics g);
}
这里添加arraylist中的对象(Player),在程序开始时调用运行:
public void renderCreatures() {
handler.getCreatureManager().addCreature(new Player(handler, 1280, 720));
}
arraylist 中的对象 (Player) 正在被删除,arraylist(正在使用 getter 调用的 getPlayer() 调用,其中 returns arraylist)被打印到之后这样控制台:
handler.getCreatureManager().removeCreature(handler.getCreatureManager().getPlayer());
System.out.println(handler.getCreatureManager().getCreatures());
控制台的输出(来自arraylist的Sysout)证明刚刚删除的对象还在arraylist中:
[dev.l0raxeo.entities.creatures.Player@3661db4d]
当你调用 renderCreatures
时,你添加了一个 new Player
但没有在任何地方保存对它的引用(例如在 player
字段中),所以当你调用 getPlayer()
,这将返回一个不同的 Player
对象。 (如果您打印 getPlayer()
,您会发现它是一个不同的实例。)
相反,只需继续将 player
添加到您正在创建它的构造函数中的列表中。
我有一个对象为 Player 的 ArrayList。当我尝试从列表中删除该对象时,控制台中没有出现任何错误,但该对象并未被删除。这是因为如果我 System.out.println(ArrayList);我删除对象后,它仍然打印出刚刚删除的对象。
我在这里管理和创建 ArrayList:
public class CreatureManager {
protected Handler handler;
private ArrayList<Creature> creatures;
private final Player player;
public CreatureManager(Handler handler) {
this.handler = handler;
player = new Player(handler, 1280, 720);
creatures = new ArrayList<>();
}
public void addCreature(Creature e) {
creatures.add(e);
}
public void removeCreature(Creature e) {
creatures.remove(e);
}
public void tick() {
for (Creature e : creatures) {
e.tick();
}
}
public void render(Graphics g) {
for (Creature e : creatures) {
e.render(g);
}
}
public Player getPlayer() {
return player;
}
public ArrayList<Creature> getCreatures() {
return creatures;
}
}
ArrayList 中的通用“Creataure”指的是以下内容class:
public abstract class Creature {
protected Handler handler;
protected int x, y;
protected int width, height;
protected Rectangle bounds;
public Creature(Handler handler, int x, int y, int width, int height) {
this.handler = handler;
this.x = x;
this.y = y;
this.width = width;
this.height = height;
bounds = new Rectangle(0, 0, width, height);
}
public abstract void tick();
public abstract void render(Graphics g);
}
这里添加arraylist中的对象(Player),在程序开始时调用运行:
public void renderCreatures() {
handler.getCreatureManager().addCreature(new Player(handler, 1280, 720));
}
arraylist 中的对象 (Player) 正在被删除,arraylist(正在使用 getter 调用的 getPlayer() 调用,其中 returns arraylist)被打印到之后这样控制台:
handler.getCreatureManager().removeCreature(handler.getCreatureManager().getPlayer());
System.out.println(handler.getCreatureManager().getCreatures());
控制台的输出(来自arraylist的Sysout)证明刚刚删除的对象还在arraylist中:
[dev.l0raxeo.entities.creatures.Player@3661db4d]
当你调用 renderCreatures
时,你添加了一个 new Player
但没有在任何地方保存对它的引用(例如在 player
字段中),所以当你调用 getPlayer()
,这将返回一个不同的 Player
对象。 (如果您打印 getPlayer()
,您会发现它是一个不同的实例。)
相反,只需继续将 player
添加到您正在创建它的构造函数中的列表中。