Как избежать частого создания объектов в цикле в Java? - PullRequest
0 голосов
/ 16 февраля 2011

например. У меня есть потребность, где мой ArrayList должен содержать hashmap для каждого индекса, например,

Public class Testing {
  private ArrayList &lt &lt HashMap&lt String, String>> myData ;
  public static void main(String[] args) {
    myData = new ArrayList &lt HashMap &lt String, String>>();
    initialize();
    //After initialize myData should contain different Hashmaps.
  }
  public static void initialize() {     
    for (int i= 0; i &lt 10 ;i++) {
      myMap = new HashMap();  //Bad because,creating Objects inside the loop.
      myMap.put("title", "abc"+i); //Adding i, just to show that new values are stored everytime
      myMap.put("name", "xyz"+i);
      myData.add(myMap);
    } 

  }
}

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

Ответы [ 3 ]

5 голосов
/ 16 февраля 2011

Если вам нужен список карт, то это то, что вам нужно сделать, и нет никакого способа обойти это.(На самом деле, вы могли бы написать вспомогательный метод, который инициализирует карты при первом обращении к нему и получать доступ к карте только через этот вспомогательный метод, но я бы не советовал это делать).

Но вы могли бы переосмыслить свой дизайни использовать другую структуру данных, возможно, перевернуть отношение Карта / Список и использовать Гуава Multimap.Это будет инициализировать коллекции только тогда, когда они необходимы, и вы можете сохранить свою процедуру инициализации.

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

1 голос
/ 16 февраля 2011

Обычно ясность важнее, чем производительность. В этом примере его компиляция была бы улучшением. ;)

Вы не создаете достаточно объектов, чтобы действительно иметь значение, но один из способов уменьшить его потребление - использовать POJO вместо HashMap.

0 голосов
/ 16 февраля 2011

Не думаю, что это плохо.

Поскольку вы хотите ArrayList<<HashMap<String, String>>, в этом нет ничего плохого.Даже без неприятного запаха:)

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