是否有可能以固定大小启动ArrayList,因此它可能不会增加更多,并将所有初始占用率启动为0?在实际上强制它的行为像普通的数组,所以我们可以使用add()到数组大小。
答案 0 :(得分:4)
为什么不使用普通Integer[] arr = new Integer[desiredLength];
Arrays.fill(arr,0);
List<Integer> list = Arrays.asList(arr);
而不是array
ArrayList基本上只是一个数组,支持我们可能需要添加更多项目的情况。如果我们不改变ArrayList的大小,那就像传统的数组一样
答案 1 :(得分:1)
您可以使用
List<Integer> list = Arrays.asList(new Integer[desiredLength]);
生成固定大小List<Integer>
,其中所有元素都初始化为null
。然后,您可以使用list.set(index,value)
修改List
的元素。但是,您无法使用add
,因为add
更改了size
的{{1}},这在固定大小的列表中是不允许的。
如果要将List初始化为非空值,可以执行以下操作:
List
答案 2 :(得分: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.
}