为单个和多个对象创建对象容器
Creating object containers for single and multiple objects
我正在设计一个 class,其目的是成为某些对象的 不可变 容器。 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
.[=15= 的情况下绝对是多余的]
这个问题没有绝对的答案:单对象容器和多对象容器之间的区别是否合理完全取决于问题的上下文。
我要说的是,除非您已经知道自己 运行 遇到内存问题 并且内存问题是由这些集合引起的 ,否则这是过早的优化这只会增加复杂性。即使您 运行 遇到性能问题,也可能有比此代码更好的优化方法。
所以答案可能应该与其他形式问题的答案相同"Should I increase complexity to optimize time/memory usage":除非它是一个问题,否则不会。
我正在设计一个 class,其目的是成为某些对象的 不可变 容器。 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
.[=15= 的情况下绝对是多余的]
这个问题没有绝对的答案:单对象容器和多对象容器之间的区别是否合理完全取决于问题的上下文。
我要说的是,除非您已经知道自己 运行 遇到内存问题 并且内存问题是由这些集合引起的 ,否则这是过早的优化这只会增加复杂性。即使您 运行 遇到性能问题,也可能有比此代码更好的优化方法。
所以答案可能应该与其他形式问题的答案相同"Should I increase complexity to optimize time/memory usage":除非它是一个问题,否则不会。