最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java數(shù)組拷貝的四種常用方式總結(jié)

 更新時間:2025年12月08日 09:16:29   作者:Geoking.  
數(shù)組是 Java 最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)之一,而 數(shù)組的拷貝(復(fù)制) 是開發(fā)中經(jīng)常遇到的需求,Java 提供了多種數(shù)組復(fù)制方式,每種方式都有自己的特點和適用場景,本篇文章將系統(tǒng)總結(jié) Java 中 數(shù)組拷貝的 4 種常用方式,需要的朋友可以參考下

引言

數(shù)組是 Java 最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)之一,而 數(shù)組的拷貝(復(fù)制) 是開發(fā)中經(jīng)常遇到的需求,例如:

  • 擴容數(shù)組
  • 復(fù)制部分元素
  • 深拷貝/防御性拷貝
  • 避免直接引用修改原數(shù)組

Java 提供了多種數(shù)組復(fù)制方式,每種方式都有自己的特點和適用場景。

本篇文章將系統(tǒng)總結(jié) Java 中 數(shù)組拷貝的 4 種常用方式。

一、Java 數(shù)組拷貝的四種方式

1. 使用for循環(huán)(最原始、最靈活)

示例代碼:

int[] src = {1, 2, 3, 4};
int[] dest = new int[src.length];

for (int i = 0; i < src.length; i++) {
    dest[i] = src[i];
}

優(yōu)點:

  • 簡單直接
  • 可自定義拷貝規(guī)則(如過濾、條件拷貝)

缺點:

  • 代碼冗長
  • 性能較低(相比原生 API)

適用于 需要完全自定義拷貝行為的場景

2. 使用System.arraycopy()(性能最優(yōu))

示例代碼:

int[] src = {1, 2, 3, 4};
int[] dest = new int[4];

System.arraycopy(src, 0, dest, 0, src.length);

參數(shù)解釋:

System.arraycopy(
    Object src,     // 源數(shù)組
    int srcPos,     // 源數(shù)組起始下標(biāo)
    Object dest,    // 目標(biāo)數(shù)組
    int destPos,    // 目標(biāo)數(shù)組起始下標(biāo)
    int length      // 拷貝長度
);

優(yōu)點:

  • 底層為 JVM 實現(xiàn)(native native 方法),性能最高
  • 可指定部分區(qū)域拷貝

缺點:

  • 參數(shù)較多,容易出錯
  • 類型必須兼容(否則拋異常)

最推薦用于 高性能場景。

3. 使用Arrays.copyOf()/Arrays.copyOfRange()(最常用)

3.1Arrays.copyOf()

適合復(fù)制整個數(shù)組或擴容數(shù)組。

int[] src = {1, 2, 3};
int[] dest = Arrays.copyOf(src, 5); // 擴容成長度 5

輸出:

[1, 2, 3, 0, 0]

3.2Arrays.copyOfRange()

適合復(fù)制部分區(qū)域。

int[] src = {1, 2, 3, 4, 5};
int[] part = Arrays.copyOfRange(src, 1, 4);

輸出:

[2, 3, 4]

優(yōu)點:

  • 使用簡單,參數(shù)不多
  • 可以返回不同長度的新數(shù)組
  • 返回泛型,支持所有類型

缺點:

  • 性能略遜于 System.arraycopy(內(nèi)部也是基于它實現(xiàn))

最常用于 普通開發(fā)、快速復(fù)制、數(shù)組擴容。

4. 使用clone()(最簡潔的深拷貝)

示例代碼:

int[] src = {1, 2, 3};
int[] dest = src.clone();

優(yōu)點:

  • 語法最簡單
  • 創(chuàng)建的是獨立數(shù)組,不會影響原數(shù)組
  • 性能很好,底層仍然是 System.arraycopy

缺點:

  • 只適用于一維數(shù)組
  • 對于二維數(shù)組只復(fù)制外層,是淺拷貝
int[][] arr2d = {{1,2}, {3,4}};
int[][] clone = arr2d.clone();

clone[0][0] = 99;
System.out.println(arr2d[0][0]); // 99(淺拷貝)

適用于 簡單復(fù)制整個數(shù)組的場景。

二、四種數(shù)組復(fù)制方式對比總結(jié)

方法是否新數(shù)組是否支持部分復(fù)制性能是否淺拷貝適用場景
for
循環(huán)
??(自定義)?☆☆深拷貝自定義規(guī)則
System.arraycopy?????淺拷貝高性能需求
Arrays.copyOf??(復(fù)制整個)???淺拷貝擴容 / 常規(guī)復(fù)制
Arrays.copyOfRange?????淺拷貝區(qū)間復(fù)制
clone()?????淺拷貝快速整體復(fù)制

一句話總結(jié):

普通場景用 Arrays.copyOf
高性能場景用 System.arraycopy
語法最簡單用 clone()
自定義邏輯用 for 循環(huán)

到此這篇關(guān)于Java數(shù)組拷貝的四種常用方式總結(jié)的文章就介紹到這了,更多相關(guān)Java數(shù)組拷貝方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java刷題之最小k個數(shù)的思路及具體實現(xiàn)

    Java刷題之最小k個數(shù)的思路及具體實現(xiàn)

    這篇文章主要介紹了Java刷題之最小k個數(shù)的思路及具體實現(xiàn),最小K個數(shù)是一個經(jīng)典的top-K問題,可以通過整體排序、建立小根堆或大根堆的方式解決,排序方式時間復(fù)雜度較高,適合數(shù)據(jù)量小的場景,小根堆適合k較小的情況,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • SpringBoot項目打成War包部署的方法步驟

    SpringBoot項目打成War包部署的方法步驟

    這篇文章主要介紹了springboot項目如何打war包流程的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解

    不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解

    這篇文章主要為大家介紹了不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 啟動springboot應(yīng)用因未配置數(shù)據(jù)庫報錯的解決方案

    啟動springboot應(yīng)用因未配置數(shù)據(jù)庫報錯的解決方案

    這篇文章主要介紹了啟動springboot應(yīng)用因未配置數(shù)據(jù)庫報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java通過數(shù)據(jù)庫表生成實體類詳細(xì)過程

    Java通過數(shù)據(jù)庫表生成實體類詳細(xì)過程

    這篇文章主要介紹了Java通過數(shù)據(jù)庫表生成實體類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • 關(guān)于線程池異步線程中再次獲取線程池資源的問題

    關(guān)于線程池異步線程中再次獲取線程池資源的問題

    這篇文章主要介紹了關(guān)于線程池異步線程中再次獲取線程池資源的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring?Boot集成JasperReport生成文檔的方法

    Spring?Boot集成JasperReport生成文檔的方法

    由于工作需要,要實現(xiàn)后端根據(jù)模板動態(tài)填充數(shù)據(jù)生成PDF文檔,通過技術(shù)選型,使用Ireport5.6來設(shè)計模板,結(jié)合JasperReports5.6工具庫來調(diào)用渲染生成PDF文檔,這篇文章主要介紹了Spring?Boot集成JasperReport生成文檔,需要的朋友可以參考下
    2023-09-09
  • Spring Boot中的Properties的使用詳解

    Spring Boot中的Properties的使用詳解

    這篇文章主要介紹了Spring Boot中的Properties的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    圖形編程中,窗口是一個重要的概念,窗口其實是一個矩形框,應(yīng)用程序可以使用其從而達(dá)到輸出結(jié)果和接受用戶輸入的效果,學(xué)習(xí)了GUI就讓我們用它來創(chuàng)建一個窗體
    2022-05-05
  • 淺談springboot升級版本引發(fā)的災(zāi)難

    淺談springboot升級版本引發(fā)的災(zāi)難

    本文詳細(xì)描述了升級spring-boot 1.x到2.x版本過程中遇到的多個問題,包括默認(rèn)值變更導(dǎo)致的JSON時間戳序列化問題和依賴沖突,下面就來詳細(xì)的介紹一下springboot升級版本會遇到的問題,感興趣的可以了解一下
    2026-02-02

最新評論

铜梁县| 涿州市| 泰宁县| 柘城县| 南木林县| 申扎县| 奉节县| 临沧市| 合山市| 多伦县| 慈溪市| 东兰县| 江源县| 嘉善县| 新宁县| 巫山县| 岚皋县| 柳林县| 正蓝旗| 高邑县| 射阳县| 界首市| 永嘉县| 东港市| 汶上县| 磴口县| 翼城县| 平安县| 吴桥县| 米易县| 修水县| 自贡市| 宝清县| 宣化县| 崇州市| 阳泉市| 靖远县| 安阳市| 高尔夫| 大余县| 三都|