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

相关文章
|
18天前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
19天前
|
消息中间件 缓存 Java
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
零拷贝技术 Zero-Copy 是指计算机执行操作时,可以直接从源(如文件或网络套接字)将数据传输到目标缓冲区, 而不需要 CPU 先将数据从某处内存复制到另一个特定区域,从而减少上下文切换以及 CPU 的拷贝时间。
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
72 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
1月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
32 4
|
1月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
30 2
|
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
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
24 3
|
1月前
|
存储 算法 Java
Java一分钟之-数组的创建与遍历
数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
29 6
|
1月前
|
存储 Java 程序员
【一步一步了解Java系列】:何为数组,何为引用类型
【一步一步了解Java系列】:何为数组,何为引用类型
25 1
下一篇
无影云桌面