码迷,mamicode.com
首页 > 编程语言 > 详细

【8.0】关于Java和c的动态数组问题

时间:2017-08-30 13:01:58      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:分配   实现   obj   大小   原因   空间   需要   补充   lis   

1.java:

java本身是没办法实现动态数组的,这个java本身不直接操作指针有关系【虽然我觉得理论上应该是和c一样,可以办到的,但java不提供,具体原因等知道了再补充】。那么java的集合例如ArrayList集合这样的是如何实现“动态数组”的呢。其实原理是:ArrayList的底层是一个数组a【Object[] a = new Object[]】, 如果需要改变ArrayList的大小,则丢弃ArrayList原先对a的引用, 然后new一个新的数组[ Object[] b = new Object[], 长度自定义],并引用之。

2.c语言:

原理:

(1)动态数组--创建,使用malloc函数:malloc的作用是在内存中动态分配一个自定义长度的连续空间;

(2)动态数组--改变数组的大小,使用relloc函数:relloc的作用是:

  a) 减少数组长度:当数组所在内存本身有剩余空间时,可按需将其本身的尾部内存拿掉【说明:对内存的操作限定在该数组所分配的内存块内】;

  b)增加数组长度:当数组所在内存的尾部有多余空间时,按需直接在原先的内存块尾部新增内存;如果原先的内存尾部空间不足,则relloc重新分配一块新的内存空间,并把原先内存的内容复制到新的内存块 上。

【8.0】关于Java和c的动态数组问题

标签:分配   实现   obj   大小   原因   空间   需要   补充   lis   

原文地址:http://www.cnblogs.com/chxbar/p/7452309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!