Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java列表大小?_Java_Collections - Fatal编程技术网

java列表大小?

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

如我们所知,当元素以向量的形式增加100%时,ArrayList的大小会增加50%。我们在哪里可以找到这种行为的实现

Thx

我们在哪里可以找到此行为的实现

在源代码中。您可以在Sun JDK安装的src.zip文件中找到Sun Java类库的源代码。OpenJDK 6和OpenJDK 7的源代码也可以通过下载。对于其他Java实现,请查看web或参考文档


注意——并非所有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);
  }
}