2015-10-25 3 views
1

Я разрабатываю класс, который имеет целью быть неизменный контейнер для некоторых объектов. Это происходит очень часто, что Container объект держит только один объект и так как он неизменен, я склонен реализовать это следующим образом:Создание контейнеров объектов для одного и нескольких объектов

public abstract class Container{ 

    public abstract Iterable<Object> getObjectGroup(); 

    private Container(){ } 

    public static Container createSingle(final Object o) { 
     return new Container() { 

      @Override 
      public Iterable<Object> getObjectGroup() { 
       return new Iterable<Object>() { 
        @Override 
        public Iterator<Object> iterator() { 
         return new Iterator<Object>() { 

          private boolean next = true; 

          @Override 
          public boolean hasNext() { 
           return next; 
          } 

          @Override 
          public Object next() { 
           next = false; 
           return o; 
          } 

          @Override 
          public void remove() { 
           throw new UnsupportedOperationException("Unable to remove from an immutable container"); 
          } 
         }; 
        } 
       }; 
      } 
     }; 
    } 

    public static Container createMultiple(final Collection<Object> o) { 
     return new Container() { 

      @Override 
      public Iterable<Object> getObjectGroup() { 
       return Collections.unmodifiableCollection(o); 
      } 
     }; 
    } 
} 

ВОПРОС: ли это на самом деле оправдано, чтобы сделать такое различие между контейнеры для одного и нескольких объектов. I primiraly делает это, чтобы не тратить память на создание определенного объекта коллекции, например ArrayList<T> или TreeSet<T>, который определенно избыточен в случае одного объекта Container.

ответ

2

На этот вопрос нет абсолютного ответа: оправдано ли различие между контейнером uni-object и контейнером с несколькими объектами, полностью зависит от контекста вашей проблемы.

Я бы сказал, что если вы уже знаете, что у вас проблемы с памятью и что проблема памяти вызвана этими коллекциями, это преждевременная оптимизация, которая просто добавляет сложности. И даже если вы столкнулись с проблемами производительности, вероятно, что-то лучше оптимизировать, чем этот код.

Таким образом, ответ должен быть таким же, как и для любого другого вопроса формы «Должен ли я увеличить сложность для оптимизации использования времени/памяти»: нет, если это не проблема.

+0

Разумный, на самом деле. Большое спасибо. –

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

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