zoukankan      html  css  js  c++  java
  • 使用反射机制,获取 ArrayList 的容量大小

      本文所有说明及代码示例都是基于JDK 1.8 

      ArrayList 提供size()方法获取当前集合的元素数量,但无法知道当前集合的容量,翻看 ArrayList 的源代码,可以看到字段 elementData 用于存放数组元素,只要能获取到 elementData 的值,通过 elementData.length 就可以得到当前集合的容量,因为无法直接获取 elementData 的值,所以想到通过反射机制来得到该值。

      直接看下面的代码吧

    import java.lang.reflect.Field;
    import java.util.ArrayList;
    
    
    public class ArrayListCapacity {
    
        public static int getArrayListCapacity(ArrayList<?> arrayList) {
            Class<ArrayList> arrayListClass = ArrayList.class;
            try {
                //获取 elementData 字段
                Field field = arrayListClass.getDeclaredField("elementData");
                //开始访问权限
                field.setAccessible(true);
                //把示例传入get,获取实例字段elementData的值
                Object[] objects = (Object[])field.get(arrayList);
                //返回当前ArrayList实例的容量值
                return objects.length;
            } catch (Exception e) {
                e.printStackTrace();
                return -1;
            }
        }
    
    }

    现在用一些代码进行测试

    import java.util.ArrayList;
    
    public class Main {
    
        public static void main(String[] args) {
    
            //初始化
            ArrayList list = new ArrayList();
            System.out.println("初始容量为:"+ArrayListCapacity.getArrayListCapacity(list));
            System.out.println("初始元素数据为:"+list.size());
    
            for (int i=1; i<20; i++){
                list.add(i);
            }
    
            System.out.println("当前容量为:"+ArrayListCapacity.getArrayListCapacity(list));
            System.out.println("当前元素数据为:"+list.size());
    
        }
    
    }

    代码运行结果

    初始容量为:0
    初始元素数据为:0
    当前容量为:22
    当前元素数据为:19
  • 相关阅读:
    Windows移动开发(五)——初始XAML
    hdu5242 上海邀请赛 优先队列+贪心
    iOS开发一行代码系列:一行搞定数据库
    MySQL内存调优
    菜鸟nginx源代码剖析 配置与部署篇(一) 手把手实现nginx &quot;I love you&quot;
    配置JBOSS多实例
    MyBatis对数据库的增删改查操作,简单演示样例
    uva 11605
    ios调用dismissViewController的一个小陷阱
    初识ASP.NET---点滴的积累---ASP.NET学习小结
  • 原文地址:https://www.cnblogs.com/hs2018/p/10449970.html
Copyright © 2011-2022 走看看