Строки могут охватывать множество вариантов использования, но использование более сложных объектов может дать вам гораздо большую гибкость в вашем коде. Видя, что в США только что объявили семена баскетбольного турнира 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 был основан на String, вы наверняка могли бы избежать использования разумного метода Region.toString () и использовать его в качестве ключа, но использование более сложного объекта позволит вам писать более гибкий код.
В то время как другие могут не соглашаться, я иногда использую Карты несколько непредсказуемым образом, где вызов HashMap.keySet () дает мне Набор полностью заполненных, сложных объектов с множеством информации. И наличие карты означает, что я могу использовать эти объекты для принятия решений и в других местах.
Например, предположим, я хотел составить список всех мест всех игр в баскетбольном турнире. Если бы у меня был HashMap со сложными объектами, это было бы так просто:
Set<Region> regions = myMap.keyset();
Set<String> gameLocations = new HashSet();
for (Region region : regions) {
gameLocations.add(region.getAllLocales());
}
И так далее. YMMV.