Я думаю, что в вашем случае вы можете использовать Google Guava Multimap и ListMultimap интерфейсы и ArrayListMultimap реализация.
Выбор правильной коллекции (в ссылке есть только стандартные коллекции, но Multimap
в этом случае прав) делает код более читабельным:
ListMultimap<String, String> myMultimap = ArrayListMultimap.create();
myMultimap.put("A", "test");
myMultimap.put("B", "entry");
, тогда myMultimap.get("A")
даетВы перечисляете (на самом деле ArrayList
экземпляр) с одним элементом: "test", тогда как myMultimap.get("C")
дает вам пустой список.
По сравнению с Map<String, List<String>>
подходом:
- вам не нужно инициализировать клавишу "C" с пустым списком для него,
- у вас нет
null
с проверками (без NullPointerException
с), - вам не нужно делать другие проверки, такие как
myMap.containsKey("A")
, - вы пишете меньше кода,
- так что ваш код менее подвержен ошибкам,
- и т. д. и т. д.
PS Вместо:
HashMap<String, ArrayList<String>> mMap = new HashMap<String, ArrayList<String>>();
используйтеинтерфейсы, а не классы при использовании коллекций , то есть:
Map<String, List<String>> mMap = new HashMap<String, List<String>>();
и даже лучше "статических конструкторов" Гуавы (вы не повторяете код):
Map<String, List<String>> mMap = Maps.newHashMap()
когда знания ореализация не обязательна.