栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

获取查看ArrayList容量

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

获取查看ArrayList容量

在学习单列集合ArrayList时,细心地同学可能会发现,该类以及其父类并没有提供获取容量的方法,那么想要查看其容量该怎么办呢?下面简单解释一下ArrayList集合的特点以及获取容量的方法。复制方法代码直接下拉到最后。。。

一、ArrayList的特点 1、ArrayList使用的是数组结构来存储数据。

所以自然可以使用索引来操作存储的数据,ArrayList提供的特有方法。如public E get(int index)返回此列表中指定位置上的元素,就是引入了坐标的体现。当然,我们发现linkedList集合中也有该方法,结合源码:


  • linkedList中get方法功能的实现:
    解释:可以看出,linkedList集合中的get方法调用了node(int index)方法,而node方法获取index对应的Node(节点)如上图所示,以从前向后找为例:是从第一个节点依次取当前节点的下个节点(next),循环执行index-1次,正好取到第index个节点。
    这里的index并是非数组概念中的索引,更像是表示集合中所存总数据个数中的第(index)几个。

  • ArrayList中get方法功能的实现:

    解释:从ArrayList集合的get方法很容易看出,是直接从存储数据的数组中取出index索引对应的数据。
2、ArrayList集合中的isEmpty()和size()方法

ArrayList中判空方法isEmpty(),经过重写后,是判断集合实际存储数据个数size是否为0

ArrayList中的size()获取集合实际存储个数,即直接返回size的值

二、获取ArrayList集合容量

这里用到了反射的知识,不过下面方法可直接粘贴使用

获取ArrayList容量实际就是获取ArrayList中存储数据的数组(Object[] elementData)长度,所以通过反射获取到elementData数组,然后得到该数组的length属性即可。方法如下:

//查看ArrayList集合容量方法 -- 反射
public int getArrayListLength(ArrayList list) throws Exception{
    //获取Class对象
    Class c = Class.forName("java.util.ArrayList");
    //映射Class对象c所表示类(即Arraylist)的属性
    Field field = c.getDeclaredField("elementData");
    //设置访问状态表示为true
    field.setAccessible(true);
    //返回指定对象上此 Field 表示的字段的值
    Object[] object = (Object[])field.get(list);
    return object.length;
}
  • 使用测试
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class Demo1 {
	
	public static void main(String[] args) throws Exception{
		List list= new ArrayList<>();
		list.add(111);
		list.add(222);
		list.add(333);
		
		System.out.println(getArrayListLength(list));	//该是默认容量值10
	}
	
	//查看ArrayList集合容量方法 -- 反射
	public static int getArrayListLength(List list) throws Exception{
		//获取Class对象
		Class c = Class.forName("java.util.ArrayList");
		//映射Class对象所表示类的属性
		Field field = c.getDeclaredField("elementData");
		//设置访问表示为true
		field.setAccessible(true);
		//返回指定对象上此 Field 表示的字段的值
		Object[] object = (Object[])field.get(list);
		return object.length;
	}
}

由于linkedList存储数据结构是双向链表,不用设置容量

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号