2014-09-25 69 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