-1

我有一个班级球员

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

//getter 和 setter

然后我会有一个球员名单

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

我需要制定一个方法来返回给定数字的玩家姓名

String getPlayerName(int num){
    ...
}

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

谢谢您的帮助。

4

6 回答 6

3

使用 aMap<Integer, Player>存储所有玩家。通过他的地图从地图中获取玩家num将非常有效:

map.get(num);
于 2012-07-19T10:48:47.900 回答
1

如果您只有列表,那么没有什么比遍历列表、找到具有正确编号的玩家并返回名称更有效的了。

我很想将方法更改为

public Player getPlayerByNumber(int num)

不过,然后让调用者得到名字。如果您以后想要获取其他值,它会更加灵活。

如果您愿意更改数据结构,则可以使用 aMap<Integer, Player>而不是列表 - 类似 a 的东西HashMap将允许有效访问。如果您需要保留插入顺序,则需要使用 a LinkedHashMap,但这可能不是必需的。

于 2012-07-19T10:48:42.837 回答
0

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

于 2012-07-19T10:49:10.713 回答
0
String getPlayerName(int num) {

for(Player player:listPlayers) {
    if(player.getNum() == num) {
    return player.getName();
    }
}
return null;
}
于 2012-07-19T10:50:25.317 回答
0

试试这个..

public String getPlayerName(int num){

   for (Player p : listPlayers){

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

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


    }

           return null;

}

为了更好的方法使用集合,如地图

于 2012-07-19T10:50:34.413 回答
0

而不是 aArrayList<Player>你可以有 a Map<Integer, Player>,然后你可以使用你的来访问 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为 a Map,那么您的运气不好,必须遍历您的ArrayList并检查num每个条目的。

于 2012-07-19T10:54:35.607 回答