2016-11-17 9 views
0

У меня есть список карт и в for-loop Я хочу добавить карту в список. Я слышал, что использование map.clear() имеет лучшую производительность, чем создание новой карты, но моя проблема в том, что List.add() работает со ссылкой на объект и с помощью Map.clear() ссылка не отображается.Добавление в список по значению вместо ссылки в Java

Есть ли возможность принудительно использовать List.add() для использования значения или для создания другого обходного пути?

+0

Если вы назовете 'clear()' на карте, оно должно уничтожить все. Это то, что вы хотите, или вы хотите получить копию исходной карты? –

+3

«Я слышал, что использование map.clear() имеет лучшую производительность, чем создание новой карты». Это звучит как микро-оптимизация, о которой вы не должны беспокоиться, если нет доказанной причины. – bradimus

+0

Релевантно: http://stackoverflow.com/questions/6757868/map-clear-vs-new-map-which-one-will-be-better – px06

ответ

3

Можно вставить «по значению», просто создав копию Map и вставив копию. Проблема в том, что это вовсе не оптимизация.

Вместо простого создания нового пустого Map, вы создаете копию заполненного Map и очищаете оригинал Map. Это означает: вы не избегаете накладных расходов на создание нового объекта, но также вводите дополнительную работу по копированию и очистке заполненного Map.

И записочка по оптимизации в целом:
Это ~ 10% от вашего кода, который будет делать 90% от работы (да, эти цифры составляют, но это обычный способ думать об оптимизации и, по крайней мере, близко к реальности). Не переопределяйте свой код в первом прогоне. Просто делайте то, что можно сделать легко и не делая код менее читаемым, запускайте профилировщик и ищите узкие места вашего кода и оптимизируйте их. Это намного эффективнее и проще, чем оптимизировать весь код.

1

Если вы постоянно используете одну и ту же карту, имеет смысл очистить ее, а не выбросить старую карту, чтобы построить новую.

Но здесь вы не хотите повторно использовать одну и ту же карту, потому что хотите сохранить ее в списке. Если вы хотите очистить его, чтобы повторно использовать его, вам нужно будет добавить копию Карты в список, чтобы иметь независимые карты. Какой из них имеет лучшую производительность - это оптимизация низкого уровня. Вы никогда не должны беспокоиться об этом, если:

  • вы обнаружили, что вы получили неприемлемые представления
  • вы нашли профилированием, что большая часть времени была потрачена там

Вы должны просто использовать то, что более четко/согласованны с вашими правилами кодирования проекта. Я бы создал новую карту на каждой итерации здесь, но это только мое мнение. Но, пожалуйста, не делайте оптимизацию низкого уровня на ранних этапах разработки.

 Смежные вопросы

  • Нет связанных вопросов^_^