Во-первых, если вы заботитесь о производительности в Java, используйте ArrayList
вместо Vector
. Как говорится в javado c:
Начиная с платформы Java 2 v1.2, [Vector
] был модернизирован для реализации интерфейса List
, сделав его членом Java Collections Framework. В отличие от новых реализаций коллекции, Vector
синхронизируется. Если поточно-ориентированная реализация не требуется, рекомендуется использовать ArrayList
вместо Vector
.
Итак, предположим, что мы используем Java 8 (и ArrayList
) , есть два перевода для кода C ++.
Версия # 1. Работает для Java 5 +
HashMap<String, ArrayList<String>> myMap = new HashMap<>();
...
ArrayList<String> list = myMap.get(myKey);
if (list == null) {
list = new ArrayList<>();
myMap.put(myKey, list);
}
list.add(newElement);
Версия # 2. Работает на Java 8 +
HashMap<String, ArrayList<String>> myMap = new HashMap<>();
...
myMap.computeIfAbsent(key, k -> ArrayList<>()).add(newElement);
Что будет быстрее? Вы должны проверить это, чтобы быть уверенным, но я думаю, что вторая версия должна быть немного быстрее, потому что она избегает второго поиска по хэш-карте в вызове put
.
И 1 строка кода аккуратнее, чем 6 строк. (YMMV для удобочитаемости. Это зависит от человека, читающего код, и от того, насколько они знакомы с Java 8+ языковыми функциями и API.)