使用反射机制,获取 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

 

转载于:https://www.cnblogs.com/hs2018/p/10449970.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值