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

时间: 2024-11-05 18:46:19

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

java中如何实现动态数组的创建与赋值

最近,项目中需要实现:提取一组数据,每个数组都有自己的属性,这组数据的长度又未知,还可能变长,变短,我考虑一会,实现如下: 1.在oncreate前面,我声明两个数组 String  data1[ ][ ]://使用的时候,比如和adapter关联 String  data2[ ][ ]://提取数据,我这里是Poisaerh出来的数据 2.实例化数组,提取数据,判断二维数据的维数个数,比如我这里得知,有五个数据,每个数据有五个属性 data2 = new String[5][5]; //实例化

int[]里数的个数怎么由输入决定?-----动态数组。

java中如何创建动态数组?(摘自百度知道) Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList.下面介绍一下ArrayList作为Java动态数组的创建以及用法. 1.语法:add()是添加一个新的元素,remove()删除一个元素,size()获得ArrayList的长度.ArrayList的下标是从0开始.2.示例代码import java.util.ArrayLis

封装一个简单的动态数组

package com.immoc; import java.util.ArrayList; import java.util.List; /** * 实现动态数组 * */ public class Array <E> { private E[]data;; private int size; public Array(int capacity){ data = (E[]) new Object[capacity]; size = 0; } public Array(){ this(10);

C++Builder 中动态数组的使用(转)

源:http://i.cnblogs.com/EditPosts.aspx?opt=1 和AnsiString类型一样,动态数组是为了和DELPHI中的动态数组相兼容而定义,在BCB中,动态数组是用模板(template)的方式使用的,动态数组的定义如下: template class DELPHIRETURN DynamicArray; 所以我们在使用时必须要指定明确的基本数据类型,比如说要定义一个int类型的动态数组arrayOfInt,其定义格式如下: DynamicArray array

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getNam

Java语言中反射动态代理接口的解释与演示

Java语言中反射动态代理接口的解释与演示 Java在JDK1.3的时候引入了动态代理机制.可以运用在框架编程与平台编程时候捕获事件.审核数据.日志等功能实现,首先看一下设计模式的UML图解: 当你调用一个接口API时候,实际实现类继承该接口,调用时候经过proxy实现. 在Java中动态代理实现的两个关键接口类与class类分别如下: java.lang.reflect.Proxy java.lang.reflect.InvocationHandler 我们下面就通过InvocationHan

java 反射 根据属性 动态设置值

package com.jhl.jvm.lesson8; import java.lang.reflect.Field; /** * * @author jhl * java 反射 根据属性 动态设置值 demo * */ public class ExceptionLog { private String exceptionLogId; private String processingType; private String type; private String content; pub

Java动态数组

其中java动态数组: Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList.下面介绍一下ArrayList作为Java动态数组的用法. 1.语法:add()是添加一个新的元素,remove()删除一个元素,size()获得ArrayList的长度.ArrayList的下标是从0开始. 2.示例代码 [java] view plaincopy package wang48.j

Java动态数组ArrayList

1.类结构: ·        java.lang.Object ·                         java.util.AbstractCollection<E> ·                                         java.util.AbstractList<E> ·                                                          java.util.ArrayList<E&