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
  • 相关阅读:
    bzoj2428 [HAOI2006]均分数据 模拟退火
    Jersey入门三:创建一个JavaEE的Web项目
    Jersey入门二:运行项目
    Jersey入门一:从Maven Archetype创建jersey项目
    Bootstrap进阶七:LESS语法详解
    Bootstrap进阶六:动态样式语言LESS简介
    Bootstrap进阶五:Web开发中很实用的交互效果积累
    Bootstrap进阶四:jQuery插件详解
    Bootstrap进阶三:jQuery插件概览
    Bootstrap进阶二:基本组件
  • 原文地址:https://www.cnblogs.com/hs2018/p/10449970.html
Copyright © 2011-2022 走看看