ArrayList的初始分配在内存中存在吗

qq_27428331 2016-09-01 04:27:15
比如用ArrayList初始分配了100个空间的话那么在内存中存在预留的100个内存吗?如果不存在那么这种方法又有什么意义呢?毕竟可以自动增长。
还有如果用new className(100);这种方法是先在内存中分配100个空间吧?
...全文
355 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_27428331 2016-09-03
  • 打赏
  • 举报
回复
引用 9 楼 u013595256 的回复:
[quote=引用 6 楼 qq_27428331 的回复:] [quote=引用 5 楼 u011635956 的回复:] 当然,额外new数组的时候也是要申请内存空间的,还有旧数组的回收. 所以事先定义好数组的size, 对空间有节省,对时间有提升
噢,那问一下ArrayList应该用什么方法来返回当前已经分配的内存的大小? size好像只是返回已经定义了的,有没有像普通数组的Length方法一样能直接返回的[/quote] 没有直接的方法,但是list的内部数组是保存在elementData这个成员变量的,可以用反射获取到

	public static int getArrayListAllocateSize(ArrayList<?> list) {
		Class<?> clazz = list.getClass();
		int size = 0;
		try {
			Field field = clazz.getDeclaredField("elementData");
			field.setAccessible(true);
			Object[] elementData = (Object[]) field.get(list);
			size = elementData.length;
		} catch (Exception e) {}
		return size;
		
	}
[/quote]多谢大神,以后学到了再回头来看,目前还看不懂反射的内容
rendason 2016-09-02
  • 打赏
  • 举报
回复
引用 6 楼 qq_27428331 的回复:
[quote=引用 5 楼 u011635956 的回复:] 当然,额外new数组的时候也是要申请内存空间的,还有旧数组的回收. 所以事先定义好数组的size, 对空间有节省,对时间有提升
噢,那问一下ArrayList应该用什么方法来返回当前已经分配的内存的大小? size好像只是返回已经定义了的,有没有像普通数组的Length方法一样能直接返回的[/quote] 没有直接的方法,但是list的内部数组是保存在elementData这个成员变量的,可以用反射获取到

	public static int getArrayListAllocateSize(ArrayList<?> list) {
		Class<?> clazz = list.getClass();
		int size = 0;
		try {
			Field field = clazz.getDeclaredField("elementData");
			field.setAccessible(true);
			Object[] elementData = (Object[]) field.get(list);
			size = elementData.length;
		} catch (Exception e) {}
		return size;
		
	}
sean_0xiao 2016-09-02
  • 打赏
  • 举报
回复
想继续问一个人,你可以私信!
tiaoxixiaoji 2016-09-02
  • 打赏
  • 举报
回复
引用 1 楼 qq_27428331 的回复:
还有谁能告诉我这里的论坛应该怎样回复单个人的评论吗,有时候想继续深入问都不知道怎么回复。。。谢谢了
引用 1 楼 qq_27428331 的回复:
还有谁能告诉我这里的论坛应该怎样回复单个人的评论吗,有时候想继续深入问都不知道怎么回复。。。谢谢了
评论右下角有个引用
静默QL 2016-09-01
  • 打赏
  • 举报
回复
引用 6 楼 qq_27428331 的回复:
[quote=引用 5 楼 u011635956 的回复:] 当然,额外new数组的时候也是要申请内存空间的,还有旧数组的回收. 所以事先定义好数组的size, 对空间有节省,对时间有提升
噢,那问一下ArrayList应该用什么方法来返回当前已经分配的内存的大小? size好像只是返回已经定义了的,有没有像普通数组的Length方法一样能直接返回的[/quote] 方法中没有提供直接返回已经开辟的数组空间大小的方法。这个楼主可以看看源码
qq_27428331 2016-09-01
  • 打赏
  • 举报
回复
引用 5 楼 u011635956 的回复:
当然,额外new数组的时候也是要申请内存空间的,还有旧数组的回收. 所以事先定义好数组的size, 对空间有节省,对时间有提升
噢,那问一下ArrayList应该用什么方法来返回当前已经分配的内存的大小? size好像只是返回已经定义了的,有没有像普通数组的Length方法一样能直接返回的
__柴夫 2016-09-01
  • 打赏
  • 举报
回复
当然,额外new数组的时候也是要申请内存空间的,还有旧数组的回收. 所以事先定义好数组的size, 对空间有节省,对时间有提升
___d 2016-09-01
  • 打赏
  • 举报
回复
引用 1 楼 qq_27428331 的回复:
还有谁能告诉我这里的论坛应该怎样回复单个人的评论吗,有时候想继续深入问都不知道怎么回复。。。谢谢了
引用。。
walkman_22 2016-09-01
  • 打赏
  • 举报
回复
API里面有例子,构造多长就是多大容量。
__柴夫 2016-09-01
  • 打赏
  • 举报
回复
规定的是数组的长度,当存储数据大于arr中数组的长度, 就会重新new一个数组, 然后将旧数组的数据copy到新数组. 如果能事先确定arr的长度, 就可以省去当数组长度不够时,新new一个数组, 节省的是一个运算效率
qq_27428331 2016-09-01
  • 打赏
  • 举报
回复
还有谁能告诉我这里的论坛应该怎样回复单个人的评论吗,有时候想继续深入问都不知道怎么回复。。。谢谢了

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧