【发布时间】:2016-01-24 13:56:47
【问题描述】:
我有以下对象列表:
private List<Object> teamlist = new ArrayList<Object>();
我正在将对象添加到列表中,如下所示:
teamlist.add(new MCWarTeam(args[0], joinkey));
现在列表中的对象没有名字,但是可以通过列表来引用,对吧?在向列表中添加新元素之前,如何检查具有某个属性的对象是否已经存在?这是对象的构造函数:
public MCWarTeam(String teamname, String joinkey){
this.teamname = teamname;
this.joinkey = joinkey;
}
我想检查是否已经有一个名为 teamname 的团队。或者,是否有更好的方法来存储对象?之前,我只是使用 HashMap 来添加团队名称和 joinkey,效果很好,但我认为使用 Objects 会更好。
这是事件处理程序的重要代码:
else if (cmd.getName().equalsIgnoreCase("createTeam")) {
if (args.length > 0 && args.length < 3) {
String joinkey = "";
if (args.length > 1)
joinkey = args[1];
String teamname = args[0];
MCWarTeam newTeam = new MCWarTeam(teamname, joinkey);
if (!teamlist.containsKey(teamname)) {
teamlist.put(teamname, newTeam);
sender.sendMessage("Created new team \"" + teamname + "\" with join key \"" + joinkey + "\" successfully! Teams:");
sender.sendMessage("All teams:");
for (String key : teamlist.keySet()) {
sender.sendMessage(key);
}
} else
sender.sendMessage("Team already exists!");
return true;
}
return false;
}
else if (cmd.getName().equalsIgnoreCase("joinTeam")) {
if (args.length > 0 && args.length < 3) {
String joinkey = "";
if (args.length > 1)
joinkey = args[1];
String teamname = args[0];
if (teamlist.containsKey(teamname)) {
String teamKey = teamlist.get(teamname).getJoinKey();
if (joinkey == teamKey) {
teamlist.get(teamname).addPlayer(playername);
Bukkit.broadcastMessage("MCWar: " + playername + " joined Team \"" + teamname + "\" successfully!");
} else
sender.sendMessage("Join key incorrect!");
} else {
sender.sendMessage("Team doesn't exist! Teams:");
for (String key : teamlist.keySet()) {
sender.sendMessage(key);
}
}
return true;
}
return false;
}
基本上,如果它返回 false,用户将收到一条消息,说明他输入的命令的正确用法。
【问题讨论】:
-
你在 MCWarTeam 中覆盖
equals吗?如果是这样,只需使用List.contains。 -
您可能还想将列表键入
<MCWarTeam>而不是<Object>。另外我不知道您是如何认为ArrayList本质上比HashMap更好的,但我希望您基于真实的东西而不是直觉。 -
看specification有那么难吗?
标签: java object arraylist bukkit