我有一个班级球员
public Player (String name, int num) {
name = name;
num= num;
}
// getters and Setters
然后我将有一个球员名单
List<Player> listPlayers = new ArrayList<Player>();
我需要创建一个方法来返回给定数字的玩家名称
String getPlayerName(int num){
...
}
我可以让方法查看所有列表,但我希望以更有效的方式执行此操作。 有人可以给我一些提示吗?
感谢您的帮助。
答案 0 :(得分:3)
使用Map<Integer, Player>
存储所有玩家。通过他的num
从地图中获取玩家将非常有效:
map.get(num);
答案 1 :(得分:1)
如果您仅获得了列表,那么您无法做到这一点比迭代列表更有效率,找到具有正确数字的玩家并返回这个名字。
我很想将方法改为
public Player getPlayerByNumber(int num)
但是,然后让呼叫者获得该名称。如果您以后想要获取其他值,它会更灵活。
如果您愿意更改数据结构,则可以使用Map<Integer, Player>
代替列表 - 类似HashMap
这样的内容可以实现高效访问。如果您需要保留广告订单,则需要使用LinkedHashMap
,但可能不需要。
答案 2 :(得分:0)
好吧,如果你试图根据他的号码返回一个玩家,那么“正确的”数据结构将是一个Map,然后你将使用playerMap.get(playerNumber)来获得与该数字相对应的玩家。
答案 3 :(得分:0)
String getPlayerName(int num) {
for(Player player:listPlayers) {
if(player.getNum() == num) {
return player.getName();
}
}
return null;
}
答案 4 :(得分:0)
试试这个..
public String getPlayerName(int num){
for (Player p : listPlayers){
if (p.getNum()==num){
return p.getName();
break();
}
}
return null;
}
为了更好地使用收集,例如Map
答案 5 :(得分:0)
您可以使用ArrayList<Player>
访问播放器,而不是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
。