【问题标题】:Creating object containers for single and multiple objects为单个和多个对象创建对象容器
【发布时间】:2016-01-24 12:07:59
【问题描述】:

我正在设计一个类,其目的是成为某些对象的不可变容器。 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&lt;T&gt;TreeSet&lt;T&gt;,这在单个对象 Container 的情况下绝对是多余的。

【问题讨论】:

    标签: java collections iterable


    【解决方案1】:

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

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

    因此,答案可能与“我是否应该增加复杂性以优化时间/内存使用”形式的所有其他问题相同:除非这是一个问题。

    【讨论】:

    • 其实是合理的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多