java为单个和多个对象创建对象容器
我正在设计一个类,其目的是成为某些对象的不可变容器。经常发生的情况是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 楼答案
这个问题没有绝对的答案:单对象容器和多对象容器之间的区别是否合理完全取决于问题的背景
我想说,除非你已经知道你遇到了内存问题,并且内存问题是由这些集合引起的,否则这是一个过早的优化,只会增加复杂性。即使遇到性能问题,也可能有比这段代码更好的优化方法
因此,答案可能应该和其他形式问题“我应该增加复杂性以优化时间/内存使用情况”的答案一样:除非这是一个问题