为单个和多个对象创建对象容器

时间:2015-10-25 09:12:42

标签: java collections iterable

我正在设计一个类,其目的是成为某些对象的 不可变 容器。经常发生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);
            }
        };
    }
}

问题: 在单个和多个对象的容器之间进行区分是否合理。我原则上这样做是为了不浪费内存来创建特定的集合对象,如ArrayList<T>TreeSet<T>,在单个对象Container的情况下肯定是多余的。

1 个答案:

答案 0 :(得分:2)

这个问题没有绝对的答案:单对象容器和多对象容器之间的区别是否合理,完全取决于问题的背景。

我会说,除非你已经知道你遇到内存问题并且内存问题是由这些集合引起的,否则这是一个过早的优化,只会增加复杂性。即使遇到性能问题,也有可能比这段代码更好地进行优化。

所以答案应该和其他形式的问题一样#34;我是否应该增加复杂性来优化时间/内存使用情况&#34;:除非它是一个问题,否则不会。