欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java通過底層原碼了解數(shù)組拷貝

 更新時間:2022年07月14日 09:55:00   作者:白朝槿kk  
一般說起數(shù)組的拷貝,首先想到的就是用循環(huán)對數(shù)組進行拷貝。但其實JAVA為我們提供了一些拷貝數(shù)組比較方便的方法,有完全拷貝的方法,也有部分拷貝的方法。接下來就一一介紹這些方法

循環(huán)對數(shù)組進行拷貝

利用循環(huán)對數(shù)組進行拷貝很簡單,就是利用循環(huán)將要拷貝的數(shù)組的元素逐個賦值給新的數(shù)組。具體代碼實現(xiàn)如下:

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            copy[i] = arr[i];
        }
    }

這是我們一般會想到的方法,下面將一些JAVA為我們提供的一些比較方便的方法。

Arrays.copyOf方法

因為我是拷貝的整型數(shù)組,所以我用的就是拷貝整型數(shù)組的Arrays.copyOf方法。也可以拷貝其它類型的數(shù)組,并不是只能拷貝整型數(shù)組。

下面就以拷貝整型數(shù)組來講解Arrays.copyOf方法,我們先來看一下Arrays.copyOf方法底層的原碼:

public static int[] copyOf(int[] original, int newLength) {
        int[] copy = new int[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

我們可以看到Array.copyOf方法的返回值是是一個整型數(shù)組,而形參是有兩個參數(shù),一個是整型數(shù)組,另外一個是一個整型的變量。

形參中整型數(shù)組就是我們要拷貝數(shù)組的數(shù)組名

形參中的整型變量就是我們要拷貝數(shù)組的長度

因為是有返回值的,所以我們在使用Arrays.copyOf方法的時候,要有數(shù)組來接收返回值。代碼實現(xiàn)如下:

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy =Arrays.copyOf(arr,arr.length);
    }

注意:拷貝的長度是可以超過要拷貝數(shù)組的長度的,如果超過了拷貝數(shù)組的長度的話,那么多出來的元素值就為0;比如:我要拷貝arr數(shù)組,但是arr數(shù)組的大小為5,如果我在拷貝的時候,將arr.length*2了,那么copy這個數(shù)組大小就是變成10,并且6~10個元素值為0.這也算是擴容。

Arrays.copyofRange方法

如果我們要拷貝部分數(shù)組的一部分,就可以使用Arrays.copyRange這個方法。同上一樣,也是用拷貝整型數(shù)組進行講解,我們先看一下它底層的原碼:

public static int[] copyOfRange(int[] original, int from, int to) {
        int newLength = to - from;
        if (newLength < 0)
            throw new IllegalArgumentException(from + " > " + to);
        int[] copy = new int[newLength];
        System.arraycopy(original, from, copy, 0,
                         Math.min(original.length - from, newLength));
        return copy;
    }

我們通過Arrays.copyRange的原碼可以看到返回值是一個整型的數(shù)組,而形參是一個整型數(shù)組,兩個整型的變量。

形參中的整型數(shù)組就是要拷貝的數(shù)組的數(shù)組名

形參中的兩個整型變量from和to就是你要拷貝數(shù)組元素的范圍,注意這個范圍是[form,to)是左閉右開的,不包括to那個位置的元素。代碼實現(xiàn)如下:

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy = Arrays.copyOfRange(arr,1,3);
    }

注意:數(shù)組下標是從0開始的,1~3號的元素是指2,3,4.但是右邊是開區(qū)間,所以不包括4,因此copy這個數(shù)組知識拷貝了2和3這兩個元素。

System.arraycopy方法

然后我們來講一下System.arraycopy方法,其實細心的同學已經發(fā)現(xiàn)了,在前面兩個方法的原碼中都有System.arraycopy方法,他們的底層也是靠System.arraycopy方法來實現(xiàn)的。我們來先看一下它底層的原碼

public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

System.arraycopy是看不到實現(xiàn)的原碼的,原因在于native,它的底層是C/C++來實現(xiàn)的。但是native方法的優(yōu)點就是執(zhí)行速度非???。代碼實現(xiàn)如下:

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy = new int[arr.length];
        System.arraycopy(arr,0,copy,0,arr.length);
    }

此時拷貝的是arr整個數(shù)組,如果想要部分拷貝,可以通過改變形參來完成部分拷貝

clone方法

最后一個是數(shù)組名.clone這個方法,這個方法了解即可,代碼實現(xiàn)如下:

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] copy = arr.clone();
    }

這樣就拷貝完了,這種方法主要是產生了對象的一個副本,地址還是不一樣的。

總結

今天主要講解了數(shù)組拷貝的幾種方法,雖然可能不會經常用到,但是我們還是掌握一下比較好。說不定那天就用到了,將來的你一定會感謝現(xiàn)在努力學習的自己。

到此這篇關于Java通過底層原碼了解數(shù)組拷貝的文章就介紹到這了,更多相關Java數(shù)組拷貝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • 一篇文章帶你了解如何正確使用java線程池

    一篇文章帶你了解如何正確使用java線程池

    這篇文章主要介紹了如何正確使用java線程池,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-09-09
  • java_object的簡單使用詳解

    java_object的簡單使用詳解

    下面小編就為大家?guī)硪黄猨ava_object的簡單使用詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • spring中FactoryBean中的getObject()方法實例解析

    spring中FactoryBean中的getObject()方法實例解析

    這篇文章主要介紹了spring中FactoryBean中的getObject()方法實例解析,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • springboot 重定向方式(redirect前綴)

    springboot 重定向方式(redirect前綴)

    這篇文章主要介紹了springboot 重定向方式(redirect前綴),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringCloud Config配置加密解密用法解析

    SpringCloud Config配置加密解密用法解析

    這篇文章主要介紹了SpringCloud Config配置加密解密用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • JVM之參數(shù)分配(全面講解)

    JVM之參數(shù)分配(全面講解)

    下面小編就為大家?guī)硪黄狫VM之參數(shù)分配(全面講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot2.2.X用Freemarker出現(xiàn)404的解決

    SpringBoot2.2.X用Freemarker出現(xiàn)404的解決

    這篇文章主要介紹了SpringBoot2.2.X用Freemarker出現(xiàn)404的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 實例講解Java的MyBatis框架對MySQL中數(shù)據的關聯(lián)查詢

    實例講解Java的MyBatis框架對MySQL中數(shù)據的關聯(lián)查詢

    這里我們來以實例講解Java的MyBatis框架對MySQL中數(shù)據的關聯(lián)查詢,包括一對多、多對一的關聯(lián)查詢以及自身關聯(lián)映射的方法等,需要的朋友可以參考下
    2016-06-06
  • MybatisPlus調用原生SQL的三種方法實例詳解

    MybatisPlus調用原生SQL的三種方法實例詳解

    這篇文章主要介紹了MybatisPlus調用原生SQL的三種方法,在有些情況下需要用到MybatisPlus查詢原生SQL,MybatisPlus其實帶有運行原生SQL的方法,我這里列舉三種,需要的朋友可以參考下
    2022-09-09
  • 如何用Intellij idea2020打包jar的方法步驟

    如何用Intellij idea2020打包jar的方法步驟

    這篇文章主要介紹了如何用Intellij idea 2020打包jar的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04

最新評論