aio*_*obe 73
我很好奇,你需要它做什么?您应该知道容量不是(可能听起来)您可以放入ArrayList的上限.它是一个值,表示可以将多少数据放入列表,而不强制它重新分配内部数组.基本上,容量的概念只是为了让你稍微调整一下性能.
无论如何,也许你已经知道了,所以这里有实际答案.
API为ArrayList提供的接口根本不支持这种用例.这件事情是由很多原因导致的.一个原因是你不应该关心这个.ArrayList被认为是一个无限数组,它从容量等细节中抽象出来.
你可以控制容量的最接近的是通过构造函数ArrayList(int initialCapacity),以及两种方法trimToSize()和ensureCapacity(int minCapacity).
然而,为了好玩,我设法通过一个丑陋的反射黑客解决它(不要使用这个):
import java.lang.reflect.Field;
import java.util.ArrayList;
public class Test {
    public static void main(String[] args) throws Exception {
        ArrayList<Integer> list = new ArrayList<Integer>(3);
        for (int i = 0; i < 17; i++) {
            list.add(i);
            System.out.format("Size: %2d, Capacity: %2d%n",
                              list.size(), getCapacity(list));
        }
    }
    static int getCapacity(ArrayList<?> l) throws Exception {
        Field dataField = ArrayList.class.getDeclaredField("elementData");
        dataField.setAccessible(true);
        return ((Object[]) dataField.get(l)).length;
    }
}
输出:
Size:  1, Capacity:  3
Size:  2, Capacity:  3
Size:  3, Capacity:  3
Size:  4, Capacity:  5
Size:  5, Capacity:  5
Size:  6, Capacity:  8
Size:  7, Capacity:  8
Size:  8, Capacity:  8
Size:  9, Capacity: 13
Size: 10, Capacity: 13
Size: 11, Capacity: 13
Size: 12, Capacity: 13
Size: 13, Capacity: 13
Size: 14, Capacity: 20
Size: 15, Capacity: 20
Size: 16, Capacity: 20
Size: 17, Capacity: 20
Gop*_*opi 19
你不能 !Java ArrayList不提供访问其当前容量的方法.
您只能使用构造函数ArrayList(int initialCapacity)构造指定初始容量的ArrayList,或通过调用ensureCapacity()来增加容量.
pol*_*nts 10
它ArrayList是一个可自动增长的元素的抽象List.你很少需要知道它的容量.考虑Effective Java 2nd Edition,Item 52:通过接口引用对象.实际上,你甚至不应该关心它是否是一个ArrayList或一个LinkedList; 它只是一个List.
也就是说,您可能会对这些方法感兴趣:
ArrayList(int initialCapacity)
void ensureCapacity(int minCapacity)
ArrayList如有必要,增加此实例的容量,以确保它至少可以容纳由minimum capacity参数指定的元素数.void trimToSize()
ArrayList实例的容量调整为列表的当前大小.应用程序可以使用此操作来最小化ArrayList实例的存储.| 归档时间: | 
 | 
| 查看次数: | 60750 次 | 
| 最近记录: |