字符串可以涵盖很多用例,但是使用更复杂的对象可以为您的代码提供更多的灵活性。看到在美国他们刚刚公布了 NCAA 大学篮球锦标赛的种子,我看看能不能想出一个以锦标赛为主题的例子。
假设我想构建一个 Hashmap 来存储每个区域中的所有团队。比赛有四个地区:东部,西部,西南和东南部。您当然可以将地图创建为:
HashMap<String, List<Team>> teamsInRegions = new HashMap<String, List<Team>>();
但是,如果您已经有一个表示区域的对象怎么办?您可能会这样做,因为每个地区的相关信息比名称要多得多。例如,我认为 Region 类可能如下所示:
public class Region {
private String name;
private Calendar firstRound;
private String firstRoundLocation;
private Calendar secondRound;
private String secondRoundLocation;
private Calendar thirdRound;
private String thirdRoundLocation;
....
}
你明白了。如果 HashMap 由字符串作为键,您当然可以使用合理的 Region.toString() 方法并将其用作键,但使用更复杂的对象将允许您编写更灵活的代码。
虽然其他人可能不同意,但我发现自己有时会以某种不可预测的方式使用 Maps,调用 HashMap.keySet() 会为我提供一组完全填充的复杂对象,其中包含大量信息。 并且拥有地图意味着我也可以使用这些对象在其他地方做出决策。
例如,假设我想建立一个包含篮球锦标赛所有比赛地点的列表。如果我的 HashMap 包含复杂的对象,那将很简单:
Set<Region> regions = myMap.keyset();
Set<String> gameLocations = new HashSet();
for (Region region : regions) {
gameLocations.add(region.getAllLocales());
}
等等。 YMMV。