Java 为单个和多个对象创建对象容器
我正在设计一个类,它的目的是成为一些对象的不可变的容器。通常情况下,Java 为单个和多个对象创建对象容器,java,collections,iterable,Java,Collections,Iterable,我正在设计一个类,它的目的是成为一些对象的不可变的容器。通常情况下,容器对象只包含一个对象,由于它是不可变的,我倾向于按如下方式实现它: public abstract class Container{ public abstract Iterable<Object> getObjectGroup(); private Container(){ } public static Container createSingle(final Object o)
容器
对象只包含一个对象,由于它是不可变的,我倾向于按如下方式实现它:
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);
}
};
}
}
公共抽象类容器{
公共抽象Iterable getObjectGroup();
专用容器(){}
公共静态容器createSingle(最终对象o){
返回新容器(){
@凌驾
公共Iterable getObjectGroup(){
返回新的Iterable(){
@凌驾
公共迭代器迭代器(){
返回新的迭代器(){
private boolean next=true;
@凌驾
公共布尔hasNext(){
下一步返回;
}
@凌驾
公共对象下一个(){
下一个=假;
返回o;
}
@凌驾
公共空间删除(){
抛出新的UnsupportedOperationException(“无法从不可变容器中删除”);
}
};
}
};
}
};
}
公共静态容器createMultiple(最终集合o){
返回新容器(){
@凌驾
公共Iterable getObjectGroup(){
返回集合。不可修改集合(o);
}
};
}
}
问题:对单个对象和多个对象的容器进行这样的区分是否有道理。我这样做基本上是为了不浪费内存来创建一个特定的集合对象,比如
ArrayList
或TreeSet
,对于单个对象Container,这个问题没有绝对的答案:单对象容器和多对象容器的合理性完全取决于问题的上下文
我想说,除非您已经知道您遇到了内存问题,并且内存问题是由这些集合引起的,否则这是一个过早的优化,只会增加复杂性。即使您遇到了性能问题,也可能有比这段代码更好的优化方法
因此,答案可能应该与其他形式问题“我是否应该增加复杂性以优化时间/内存使用”的答案相同:除非这是一个问题。实际上是合理的。多谢。