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

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重新分配一块新的内存空间,并把原先内存的内容复制到新的内存块 上。

posted @ 2017-08-30 11:39  chxbar  阅读(248)  评论(0编辑  收藏  举报