Java 声明ArrayList
我想知道我什么时候实例化一个类的ArrayList。如果我通过给它一个初始大小来声明它像#2而不是#1,它会更快吗?或者,如果我确切知道要向构造函数添加多少列,我应该只给构造函数一个初始大小吗Java 声明ArrayList,java,arraylist,Java,Arraylist,我想知道我什么时候实例化一个类的ArrayList。如果我通过给它一个初始大小来声明它像#2而不是#1,它会更快吗?或者,如果我确切知道要向构造函数添加多少列,我应该只给构造函数一个初始大小吗 List columns=new ArrayList() List columns=newarraylist(10) 默认情况下,它分配10引用,因此没有差异 见证它 它的用途是预测大概的数量,例如,如果您认为它可能需要大约25个元素,并且您认为它也可能增长,那么只需将initialCapacity定义为
List columns=new ArrayList()代码>
List columns=newarraylist(10)代码>
默认情况下,它分配
10
引用,因此没有差异
见证它
它的用途是预测大概的数量,例如,如果您认为它可能需要大约25个元素,并且您认为它也可能增长,那么只需将initialCapacity定义为
25
,以避免数组复制,这是一种成本更高的操作默认情况下,它分配10
引用,因此没有差异
见证它
它的用途是预测大概的数量,例如,如果您认为它可能需要大约25个元素,并且您认为它也可能增长,那么只需将initialCapacity定义为25
,以避免数组复制,因为这是一种成本更高的操作,两者之间没有区别
构造函数中的参数用于指定列表的初始容量,默认情况下为10
或者,如果我确切知道要向构造函数添加多少列,我应该只给构造函数一个初始大小吗
通常,如果要经常在列表中添加太多元素,可以提供更大的初始容量,这样备份阵列的大小就不会被重新调整太多次。
好的,如果你有一个固定的大小,它根本不会改变,你可以简单地使用一个数组。就目前而言,两者之间没有区别
构造函数中的参数用于指定列表的初始容量,默认情况下为10
或者,如果我确切知道要向构造函数添加多少列,我应该只给构造函数一个初始大小吗
通常,如果要经常在列表中添加太多元素,可以提供更大的初始容量,这样备份阵列的大小就不会被重新调整太多次。
好吧,如果你有一个固定的大小,它根本不会改变,你可以简单地使用一个数组。对于这种特殊情况,两个选项的结果是相同的。然而,我们是否应该提高标准,并按照您的要求将其作为一般案例:
或者,如果我确切知道要向构造函数添加多少列,我应该只给构造函数一个初始大小吗
您可以这样做,以避免添加超出列表基础数组边界的元素时发生的大小调整
检查ArrayList
的代码:
public boolean add(E e) {
ensureCapacity(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
ensureCapacity
是一种方法,如果列表的基础数组实际上已“满”,则可以调整其大小:
public-capacity(int-minCapacity){
modCount++;
int oldCapacity=elementData.length;
如果(最小容量>旧容量){
对象oldData[]=elementData;
int newCapacity=(旧容量*3)/2+1;
if(新容量<最小容量)
新容量=最小容量;
//minCapacity通常接近大小,因此这是一个胜利:
elementData=Arrays.copyOf(elementData,newCapacity);
}
}
设置初始已知容量可防止此调整大小。不过,如果您确切知道要使用多少个元素,为什么不使用数组呢?对于这种特殊情况,两个选项的结果相同。然而,我们是否应该提高标准,并按照您的要求将其作为一般案例:
或者,如果我确切知道要向构造函数添加多少列,我应该只给构造函数一个初始大小吗
您可以这样做,以避免添加超出列表基础数组边界的元素时发生的大小调整
检查ArrayList
的代码:
public boolean add(E e) {
ensureCapacity(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
ensureCapacity
是一种方法,如果列表的基础数组实际上已“满”,则可以调整其大小:
public-capacity(int-minCapacity){
modCount++;
int oldCapacity=elementData.length;
如果(最小容量>旧容量){
对象oldData[]=elementData;
int newCapacity=(旧容量*3)/2+1;
if(新容量<最小容量)
新容量=最小容量;
//minCapacity通常接近大小,因此这是一个胜利:
elementData=Arrays.copyOf(elementData,newCapacity);
}
}
设置初始已知容量可防止此调整大小。不过,如果您确切知道要使用多少元素,为什么不使用数组?如果您确切知道要将多少成员放入ArrayList,那么提供初始容量(第二种情况)可以避免在列表增长时重新创建和复制基础数组表示形式
您的示例使用了10个成员,这恰好是ArrayList当前实现的默认大小。但是,我假设您询问的是更一般的情况。如果您确切知道将在ArrayList中放入多少成员,那么提供初始容量(第二种情况)可以避免在列表增长时重新创建和复制基础数组表示
您的示例使用了10个成员,这恰好是ArrayList当前实现的默认大小。不过,我想你问的是更一般的情况。最后这实际上是在回答问题最后这实际上是在回答问题只是一个提示,从java 7开始,你不必在右边写类型。->List columns=new ArrayList()
到List columns=new ArrayList()
只是一个提示,从java 7开始,您不必在右侧写入类型。->List columns=new ArrayList()
到List columns=new ArrayList()
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}