2014-09-25 68 views
0

这已经困惑了我一会儿,这个画面更新的ArrayList

public class someObject { 

private ArrayList<Player> listOfPlayers = new ArrayList<Player>(); 
private String name; 

public void addPlayer(Player player){ 
    listOfPlayers.add(player); 
} 
} 

这个对象的多个实例可以在游戏中创建,我不明白的是你怎么更新ArrayList的特定实例,例如

当前有10个实例的someObject类Player 1,2等等。玩家5想要将玩家添加到他的listOfPlayers中,我将如何处理获得他目前在listOfPlayers中的具体实例的阵列列表。

我一直在做的是

for (int i = 0; i < objects.size(); i ++){ //ArrayList<someObject> 
     someObject temp = someObject.get(i); 
     if (temp.listOfPlayers.contains(player)){ 
      return true; 
     } 
} 

其中一期工程,但它使用的someObjects类的每一个getter和setter循环似乎错了,难道还有比这更好的办法吗?

回答

0

更好的解决方案/替代方案将使用地图。

Map<someObject, List<Players>> objPlayersMap= new HashMap..... 

后来,你可以检查你的病情就像

objPlaersMap.get(someObject).contains(... 
+0

名单仅有1例中,类有不同的东西 – user3439600 2014-09-25 08:38:56

+0

所以在很多名单我创建对象的主类 someObject o = new someObject(); 我可以使用objPlaersMap.get(someObject).contains(player); 这将在所有活动实例中搜索特定玩家? – user3439600 2014-09-25 08:43:56

+0

是的。确切地说... – 2014-09-25 08:45:59

0

如果你想,U可以修改你的“播放器”类,并添加一个id。用setter和getter你可以用这个id来处理这些。它的一个想法,如果你想更多地喜欢它。

+0

他们有一个ID,我将如何获得队列ID不在所有实例中循环播放的实例? – user3439600 2014-09-25 08:41:28

+0

U有两种方法:使用地图来获取特定实例(如@baki答案)或者重新安排您的ArrayList 插入操作。你可以在ArrayList [4]处添加@ example player 5。所以你可以每次都有正确的实例。 – 2014-09-25 08:51:59

0

最好的方法是使用与玩家的名字作为关键的地图。这样,你就可以很容易地获取列表没有环

Map<String, List<Players>> players = new HashMap<String,List<Players>>(); 
players.put("player1", new SomeObject()); 
players.put("player2", new SomeObject()); 
.... 

你这样做:

List<Players> player1 = players.get("player1"); 
+0

如何?例如,会有多个列表,listOfPlayers,listOfSpawns,如果可能,我如何通过ID(名称)获取实例? – user3439600 2014-09-25 08:40:34

+0

您可以使用该键来改变它,或者如果您愿意,可以为每种类型的列表创建一个映射 – baki 2014-09-25 08:42:23