2012-07-19 162 views
-1

我有一类玩家返回字符串

public Player (String name, int num) { 
    name = name; 
    num= num; 
} 

// getter和setter

那么我将有球员名单

List<Player> listPlayers = new ArrayList<Player>(); 

我需要制作一个返回玩家名称的方法

String getPlayerName(int num){ 
    ... 
} 

我可以使该方法看到所有列表,但我想以更高效的方式执行此操作。 有人可以给我一些提示吗?

感谢您的帮助。

+0

一个类的方法? – 2012-07-19 10:48:48

+0

你应该尝试更清楚地阐述你的问题。例如,这不是你发布的类,而是一个构造函数。另外,你的最后一句话(“我做这个方法......”)几乎是不可读的......我们都得到你想要的东西(或许^^),但问题并不清楚。 – brimborium 2012-07-19 10:58:28

+0

以及答案类型是最糟糕的,根本没有答案。 我不是英语母语的对不起。 我知道这是构造函数只是一个例子,我认为帮助理解的其他人! – rgomes 2012-07-19 12:56:37

回答

3

使用Map<Integer, Player>来存储所有玩家。通过从地图获取一个球员他num会很efficent:

map.get(num); 
+0

谢谢!它正是我需要的。 – rgomes 2012-07-19 12:54:43

1

如果你已经只有得到了名单,没有什么可以做的,比遍历列表更有效率,找到具有正确数字的球员并返回名称。

我会忍不住改变方法,只是

public Player getPlayerByNumber(int num) 

不过,让来电者随后得到名字。如果您稍后想要获取其他值,它会更加灵活。

如果您愿意更改数据结构,则可以使用Map<Integer, Player>而不是列表 - 类似于HashMap之类的内容将允许高效的访问。如果您需要保留广告订单,则需要使用LinkedHashMap,但这可能不是必需的。

0

好吧,如果你想根据他的号返回的球员,“正确”的数据结构将是一个地图,那么你'使用playerMap.get(playerNumber)来获取与该号码对应的播放器。

0
String getPlayerName(int num) { 

for(Player player:listPlayers) { 
    if(player.getNum() == num) { 
    return player.getName(); 
    } 
} 
return null; 
} 
+0

int不是一个对象,所以你不能使用等于 – 2012-07-19 10:51:35

+0

谢谢。编辑答案 – 2012-07-19 10:54:32

+0

欢迎您 – 2012-07-19 10:57:42

0

试试这个..

public String getPlayerName(int num){ 

    for (Player p : listPlayers){ 

      if (p.getNum()==num){ 

       return p.getName(); 
       break(); 
      } 


    } 

      return null; 

} 

为了更好的办法利用收集诸如地图取而代之的是ArrayList<Player>

+0

为什么在退货后中断?如果你指定一个不存在的数字会发生什么? – 2012-07-19 10:52:05

+0

循环结束后,如果找不到与空值匹配的方法 – 2012-07-19 10:53:02

0

你可以有一个Map<Integer, Player>,那么你可以将播放器使用访问num

Map<Integer, Player> listPlayerList = new HashMap<Integer, Player>(); 

// fill in your players with the following line 
listPlayerList.add(player.getNum(), player); 

// remove a player 
listPlayer.remove(player.getNum(); 

// get player with specific num 
Player p = listPlayer.get(num); 
String name = p.getName(); 

// iterate over players 
for (Player p: listPlayer.values()) { 
    doStuffWith(p); 
} 

如果您不能将ArrayList更改为Map,那么您运气不好,必须遍历您的ArrayList并检查每个条目的num