Java查看List扩容后的容量

来源:互联网 发布:福建广电网络人工电话 编辑:程序博客网 时间:2024/04/19 13:49

Java中数组的容量是固定的,顶以后无法修改,而集合类很好的解决的变长数组的需求,集合的容量是有Java自己控制的,但是如何才能知道扩容后的大小呢?

如果是使用size(),我们看到的依然是其中元素的个数,而没有办法看到扩容后的容量大小,为了看到这个容量大小我们可以使用反射来查看,下面直接上代码

public static void main(String[] args) {        List<Integer> myList=new ArrayList<Integer>(10);        System.out.println(myList.size());        myList.add(1);        myList.add(2);        myList.add(3);        myList.add(4);        myList.add(1);        myList.add(2);        myList.add(3);        myList.add(4);        myList.add(4);        System.out.println(myList.size());        myList.add(6);        myList.add(5);        Class c=myList.getClass();        Field f;        try {            f=c.getDeclaredField("elementData");            f.setAccessible(true);            Object[] o=(Object[])f.get(myList);            System.out.println(o.length);        } catch (NoSuchFieldException | SecurityException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalArgumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                    }

运行得到的结果为

可以看到在达到初始容量后,扩容为了原来的1.5倍,但是我之前在一些书中看到的结论是(length*3)/2+1,但是经过自己的实践发现是直接的1.5倍,我的jdk为1.8的

0 0
原创粉丝点击