2016-08-03 82 views
1

是否有可能启动具有固定尺寸的ArrayList,使其不能增加更多,并将所有初始占用初始化为0?在实际上迫使它像普通数组一样行为,所以我们可以使用add()直到数组大小。以最大尺寸初始化ArrayList

+2

不,不是。这听起来像一个[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem):你想达到什么目的?也许一个有界的队列会更合适? – assylias

+0

为什么你不使用正常的数组呢?什么是确切的动机? –

+0

尝试使用LinkedList等其他ArrayList实现,例如 – mattymanme

回答

1

您可以使用

List<Integer> list = Arrays.asList(new Integer[desiredLength]); 

产生一个固定大小List<Integer>中,所有的元素都被初始化为null。然后,您可以使用list.set(index,value)修改List的元素。尽管如此,您不能使用add,因为add会更改的size,这在固定大小的列表中是不允许的。

如果要初始化列表非空值,你可以做这样的事情:

Integer[] arr = new Integer[desiredLength]; 
Arrays.fill(arr,0); 
List<Integer> list = Arrays.asList(arr); 
+0

可能是最好的方法,尽管它不会生成实际的ArrayList。 –

+0

@DiegoMartinoia实际的ArrayList(即java.util.ArrayList)没有OP所要求的固定大小。 – Eran

+0

是的,我知道:)我只是认为这是值得一提的,如果他试图将它分配给AL,并且被错误所困惑 –

4

为什么不使用正常array而不是ArrayList

ArrayList的基本上都是简单地用一个数组支持我们可能需要添加更多项目的情况。如果我们不改变这种ArrayList中的尺寸比它就像传统的阵列

+0

我很乐意使用它,但我想创建一个5大小的数组列表,初始化为零。然后重新开始并根据某些条件从开始分配1,最后如果我有全部5个元素1,这意味着测试是成功的,否则如果单个零在那里,它将指示错误。 –

+0

使用普通的'array'有什么问题。您可以初始化一个大小为5的数组,并且在初始化期间,所有值都将为零,然后您可以继续操作。 –

1

您可以只使用ArrayList中,保证了ArrayList的一个最小尺寸:

ArrayList<T> myArrayList = new ArrayList(); 
myArrayList.ensureCapacity(n); 

但是,这并不设置一个固定的大小,只是大于n的东西,并且它不妨碍你添加多于n。

正如其他人所说,你可能更擅长做别的事情。如果你真的想达到这个目标,你可以写下你自己的收藏:

public class MyArrayList<T> { 
    ArrayList<T> arrayList; 
    int size; 

    public MyArrayList(int size) { 
    this.size = size; 
    arrayList = new ArrayList<>(); 
    arrayList.ensureCapacity(size); 
    } 

    public void add(T x) { 
    if (arrayList.size() >= size) { 
     throw new IllegalStateException(); 
    } 
    arrayList.add(x); 
    } 

    //remove, etc.. . You can even extend/implement arrayList/list if you want to do polymorphism. 
}