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);
  }
}


目录
相关文章
|
1月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
15天前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
28天前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
31 4
|
28天前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
23 2
|
1月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
49 2
|
1月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
101 1
|
1月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
|
1月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
46 9
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
40 1
|
1月前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
24 3