Программная производительность метода Java - PullRequest
1 голос
/ 26 сентября 2011

Два способа делать вещи, и мне любопытно, что быстрее:

Первый способ:

if (!map.containsKey(key)) {
    map.put(key, new ArrayList<String>());
}
map.get(key).addAll(someList);

Второй способ:

List<String> existingList = map.get(key);
if (existingList == null){
    existingList = new ArrayList<String>();
}
existingList.addAll(someList);
map.put(key, existingList);

Первый способможет показаться, что приходится чаще хэшировать ключ, но требует меньшего количества создания объектов, чем второй способ.Мне кажется, что второй способ может быть быстрее, но более ресурсоемким, чем первый.

Мысли?

1 Ответ

3 голосов
/ 26 сентября 2011

Модифицированная версия вашего второго способа будет оптимальной:

List<String> existingList = map.get(key);
if (existingList == null){
   existingList = new ArrayList<String>();
   map.put(key, existingList);
}
existingList.addAll(someList);

Это гарантирует, что поиск выполняется только один раз, а экземпляр List создается только и вставляется в Map при необходимости..

РЕДАКТИРОВАТЬ: Как отмечено @ Martijn Courteaux , второй поиск выполняется put(), когда ключ не найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...