У меня есть HashMap<Foo,ArrayList<Bar>>
, и я хочу, чтобы когда я получил ArrayList
, связанный с ключом, и добавил к нему какое-то значение.Тройной оператор, выполняющий методы
Тройная оператор делает
То, что я сейчас делаю это проверка, если значение, связанное с ключом Foo является недействительным, если после этого сделать новый ArrayList добавить, что я хочу его и положил его обратно в карта. Если нет, я сохраняю, что arrayList добавляет то, что я хочу к нему, и снова помещаю его обратно в карту.
я мог бы сделать это следующим образом:
ArrayList<Bar> valuesList = map.get(key);
if(valuesList == null){
valuesList = new ArrayList<Bar>;
}
valuesList.add(Item);
map.put(Foo,valuesList);
Но я предпочитаю использовать тройной оператор, чтобы мой код немного короче:
ArrayList<Bar> valuesList= (map.get(key) == null) ? new ArrayList<Bar>() : map.get(key);
valuesList.add(Item);
map.put(Foo,valuesList);
Мой вопрос (во втором) пример я выполняю map.get(key)
дважды? Или компилятор Java умеет и оценивает его только один раз? (Я знаю, что это крошечная разница в скорости выполнения, но если она выполняется дважды, для меня достаточно причины, чтобы я начал использовать пример 1)
Использование гуавы MultiMap вместо: https://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#Multimap – eiden
вы могли бы исследовать байткод с помощью 'javap -c com.mypackage.MyClass', чтобы посмотреть, что происходит под капотом. – wvdz
Итак, вместо использования временной переменной для результата 'map.get (key)', вы скорее всего используете первый код вместо предпочитаемого трехмерного оператора? – Tom