среда, 11 апреля 2012 г.

Most frequently used Collections methods

Заметил, что самыми частыми методами, которые я использую из класса Collections являются не sort() или reverse(), которые чаще других упоминаются в различных книжках, а... emptyList() и singletonList() Поэтому эта краткая заметка будет о них, на случай, если кто-нибудь о них до сих пор не знает.

Как ясно из названия Collections.emptyList() возвращает пустую коллекцию типа List. Т.е. теперь не надо делать return new ArrayList<Something>() в методах и плодить временные пустые объекты. Кроме незначительной экономии памяти код также получается более ясным, точно выражая намерения программиста. До кучи, там же есть такие методы как emptySet() и emptyMap(). (Кстати, в некоторых случаях возникает необходимость параметризовать вызов метода и делается это немного нетривиально — Collections.<Something>emptyList())

Также часто возникает необходимость вернуть объект типа List (либо Set, либо Map) с одним единственным элементом. В этом вам помогут методы singletonList(), singletonMap() либо singleton() (для Set-а).

Кстати, если вдруг эти методы вас чем-то не устроят, то рекомендую обратить взор на immutable коллекции из Google Guava, у которых есть удобный метод-билдер of() для конструирования коллекций из любого количества значений. См. ImmutableList.of(), ImmutableSet.of() и ImmutableMap.of(). Причем, если вызвать метод of() без аргументов, то он возвращает пустую коллекцию.

2 комментария:

  1. Антон Максимов11 апреля 2012 г., 10:25

    Особенное удобство этих коллекций именно в иммутабельности. Ты всегда точно знаешь, что там будет лежать. И доступ к ним не требует никакой синхронизации.

    ОтветитьУдалить
  2. В Groovy коллекции встроены в язык.
    def list = []
    def list = [1, 2, 3]
    def map = [:]
    Скоро допилят dynamic invoke и скорость будет почти как у java. В scala наверное тоже в язык встроены.

    ОтветитьУдалить