Java基础数组扩容和拷贝

简介: Java基础数组扩容和拷贝

关于一维数组的扩容。


在java开发中,数组长度一旦确定不可变,那么数组满了怎么办?


数组满了,需要扩容。。


java中对数组的扩容是:


先新建一个大容量的数组,然后将小容量数组中的数据一个一个拷贝到大数组中。


结论:


==数组扩容效率较低。==因为涉及到拷贝的问题。所以在以后的开发中请注意:尽可能少


的进行数组的拷贝。可以在创建数组对象的时候预估计以下多长合适,最好预估准确,这样可以减少数组的扩容次数。提高效率。


数组扩容拷贝内存分析图:



0a2653c851af460fa595bd959398a8f1.png


示例代码:


public class ArrayTest07 {
    public static void main(String[] args) {
        //定义一个数组静态初始化,拷贝源(从这个数组中拷贝)
        int[] src = {1,2,3,4,5};
        //拷贝目标(拷贝到这个目标数组上)
        int[] dest = new int[10];
        //把src数组拷贝进dest数组中
        //第一个参数代表要拷贝的数组,第二个参数代表从那个下标出开始拷贝
        //第三个参数代表拷贝数组的容器,第四个参数代表从何处下标开始拷贝
        //第五个参数代表拷贝的数组长度
        System.arraycopy(src,1,dest,2,3);
        for(int i = 0;i<dest.length;i++) {
            System.out.print(dest[i] + " ");
        }
        //输出换行
        System.out.println("");
        //创建一个String类型的数组,// 数组中如果存储的元素是引用,可以拷贝吗?当然可以。
        String[] s = {"hello","world","study","java","oracle","mysql","jdbc"};
        //动态初始化一个数组以备拷贝用
        String[] s1 = new String[10];
        System.arraycopy(s,0,s1,0,s.length);
        for(int i = 0;i< s1.length;i++){
            System.out.print(s1[i] + " ");
        }
        //输出换行
        System.out.println("");
        //分隔符
        System.out.println("=========================");
        //创建一个Object类型的数组以备拷贝
        // 思考一下:这里拷贝的时候是拷贝对象,还是拷贝对象的地址。->(地址。)
        Object[] o = {new Object(),new Object(),new Object()};
        Object[] newo = new Object[5];
        System.arraycopy(o,0,newo,0,o.length);
        for(int i = 0;i< newo.length;i++){
            System.out.println(newo[i]);
        }
    }
}


运行结果:


2d65d23f6d4748949b924e4057485923.png

相关文章
|
2天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
2天前
|
存储 Java 索引
Java基础(六):数组
Java基础(六):数组
Java基础(六):数组
|
2月前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
3月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
107 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
消息中间件 缓存 Java
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
零拷贝技术 Zero-Copy 是指计算机执行操作时,可以直接从源(如文件或网络套接字)将数据传输到目标缓冲区, 而不需要 CPU 先将数据从某处内存复制到另一个特定区域,从而减少上下文切换以及 CPU 的拷贝时间。
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
|
3月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
42 4
|
3月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
52 2
|
3月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
115 2
|
3月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
64 9
|
3月前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
32 3