java数组的三种扩容方式以及程序实现

简介: java数组的三种扩容方式以及程序实现

因为数组是在内存中连续的一段存储空间,所以数组一旦被创建,空间就固定了,长度是不能扩增的。

数组的长度是固定的,如果需要扩充**,必须创建新数组,原数组的长度要复制到新数组中 。**

java中,数组类型的变量传值的时候,事实上传递的是数组的地址

数组扩容的三种方式:

  1. 新建一个数组,把原来数组的内容搬到 新数组中。
  2. 用系统定义函数system.arraycopy实现扩容;
  3. 用系统定义函数copyof函数实现扩容;

下面用程序来实现这三种扩容

class expand2{
  //利用函数的方法进行数组的扩充
  public static void main(String[] args) {
    //定义一个小型的数组
    int[] a={1,2,3,5};
    //调用扩容函数
    //a=expand2(a);
    //a=expand3(a);
    a=expand4(a);
    //测试是否扩容完成,输出此时数组a中的值
    for (int i=0;i<a.length;i++) {
      System.out.println("aaaa:"+a[i]);
    }
  }
  //扩容函数,
  public static int[] expand2(int a[]){
    //定义一个新数组b,并为其赋值长度为数组a的二倍
    int b[] = new int[a.length*2];
    //将数组a的元素循环遍历到数组b中
    for (int i=0;i<a.length;i++) {
      b[i] = a[i];
    }
    //返回扩容后的数组b
    return b;
  }
  //数组扩容方法3,利用系统函数arraycopy进行扩容
  public static int[] expand3(int a[]){
    int[] b = new int[a.length*2];
    //系统函数进行扩容,将a[]的值赋值到b[]中,共a.length个长度。
    //相当于第19-21行
    System.arraycopy(a,0,b,0,a.length);
    return b;
  }
  //数组扩容方法4,利用系统函数copy进行扩容
  public static int[] expand4(int a[]){
    //可以查看api文档,java.util.Arrays.copyOf的详细使用;
    return java.util.Arrays.copyOf(a,a.length*2);
  }
}


目录
相关文章
|
4月前
|
存储 人工智能 Java
打乱数组内容引发的问题( Java)
本文介绍了两种实现数组随机打乱的方法,并深入探讨了Java中原始数据类型与对象类型的差异。方法一通过自定义随机数交换数组元素位置,方法二借助`Collections.shuffle()`函数完成数组打乱。同时,文章详细解析了`int`和`Integer`的区别,包括声明方式、内存占用、初始化以及对象特性等,并讲解了自动装箱与拆箱的功能,帮助读者更好地理解Java的基础知识。
|
6月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
253 1
Java 中数组Array和列表List的转换
|
6月前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
112 23
|
6月前
|
存储 Java 索引
Java 复制数组
本文介绍了Java中数组的基础知识与常用操作,包括数组的概念、创建、访问元素、遍历、复制、排序和搜索等方法。同时详细讲解了数组的五种赋值方式,并通过代码示例演示了求总和平均值、最大最小值、升序降序排序及Arrays类的常用方法。内容深入浅出,适合初学者学习掌握Java数组的核心功能与应用场景。
|
5月前
|
存储 Java 数据挖掘
Java 中数组的多种定义方式
本文深入解析了Java中数组的多种定义方式,涵盖基础的`new`关键字创建、直接初始化、动态初始化,到多维数组、`Arrays.fill()`方法以及集合类转换为数组等高级用法。通过理论与实践结合的方式,探讨了每种定义方法的适用场景、优缺点及其背后的原理,帮助开发者掌握高效、灵活的数组操作技巧,从而编写更优质的Java代码。
170 0
|
6月前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
|
6月前
|
Java 编译器
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
|
6月前
|
存储 Java 数据库连接
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
|
6月前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
228 0
|
8月前
|
存储 Java C++
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
397 12