从列表中的自定义类返回字符串

时间:2012-07-19 10:46:11

标签: java class list

我有一个班级球员

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

// getters and Setters

然后我将有一个球员名单

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

我需要创建一个方法来返回给定数字的玩家名称

String getPlayerName(int num){
    ...
}

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

感谢您的帮助。

6 个答案:

答案 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