java列表大小?
如我们所知,当元素以向量的形式增加100%时,ArrayList的大小会增加50%。我们在哪里可以找到这种行为的实现 Thx 我们在哪里可以找到此行为的实现 在源代码中。您可以在Sun JDK安装的src.zip文件中找到Sun Java类库的源代码。OpenJDK 6和OpenJDK 7的源代码也可以通过下载。对于其他Java实现,请查看web或参考文档java列表大小?,java,collections,Java,Collections,如我们所知,当元素以向量的形式增加100%时,ArrayList的大小会增加50%。我们在哪里可以找到这种行为的实现 Thx 我们在哪里可以找到此行为的实现 在源代码中。您可以在Sun JDK安装的src.zip文件中找到Sun Java类库的源代码。OpenJDK 6和OpenJDK 7的源代码也可以通过下载。对于其他Java实现,请查看web或参考文档 注意——并非所有Java类库都以相同的方式实现这些类。例如,查看Apache Harmony项目源代码或GNU类路径项目源代码并不能告诉您S
注意——并非所有Java类库都以相同的方式实现这些类。例如,查看Apache Harmony项目源代码或GNU类路径项目源代码并不能告诉您Sun JDK类库是如何工作的。。。在执行中 下面是一个实现:
public boolean add(E object) {
if (lastIndex == array.length) {
growAtEnd(1);
}
array[lastIndex++] = object;
modCount++;
return true;
}
它调用GrowtEnd,在该方法中,我们可以找到代码段:
} else {
int increment = size / 2;
if (required > increment) {
increment = required;
}
if (increment < 12) {
increment = 12;
}
E[] newArray = newElementArray(size + increment);
if (size > 0) {
System.arraycopy(array, firstIndex, newArray, 0, size);
firstIndex = 0;
lastIndex = size;
}
array = newArray;
。。其中,增量设置为当前列表实际大小的50%
docjar包含Apaches开源JavaSE6平台的源代码。有很多不同的Java实现,但不能保证每个实现都显示出完全相同的行为,如以50%的步长增加大小,只要此方法的接口中没有记录/要求。在ArrayList中:
注意:除非另有设置,否则capacityIncrement默认为0,因此向量的默认行为是每次需要扩展备份阵列时加倍,但如果设置capacityIncrement,则它将以该值递增
此外,对于ArrayList和Vector,如果新容量仍然不够大,则无论增加了什么,都会被取代,在这种情况下,将使用所需的容量。此实现不同:与Andreas不同。最初,ArrayList将具有一些默认容量,向量为10。如果没有空间添加新元素,那么它将增加50%。@RC。那么结论是什么呢?。。。对不起,伙计们,我还在编辑和改进。起初,我被“growteand1”这个词误导了,没有深入研究,我认为它会将大小增加一个。@JavaUser,-@Andreas\u D或@RC链接的源都不是太阳源。Sun sources将包括Sun Microsystems的版权。请注意,这已完全改写为JDK 7:
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);
}
}
private void ensureCapacityHelper(int minCapacity) {
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object[] oldData = elementData;
int newCapacity = (capacityIncrement > 0) ?
(oldCapacity + capacityIncrement) : (oldCapacity * 2);
if (newCapacity < minCapacity) {
newCapacity = minCapacity;
}
elementData = Arrays.copyOf(elementData, newCapacity);
}
}