我正在设计一个类,其目的是成为某些对象的 不可变 容器。经常发生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
的情况下肯定是多余的。
答案 0 :(得分:2)
这个问题没有绝对的答案:单对象容器和多对象容器之间的区别是否合理,完全取决于问题的背景。
我会说,除非你已经知道你遇到内存问题并且内存问题是由这些集合引起的,否则这是一个过早的优化,只会增加复杂性。即使遇到性能问题,也有可能比这段代码更好地进行优化。
所以答案应该和其他形式的问题一样#34;我是否应该增加复杂性来优化时间/内存使用情况&#34;:除非它是一个问题,否则不会。