Java中各種數組復制方式的效率對比

? ? ? ? 在?Java?中,數組復制是一個常見的操作,尤其是在處理動態數組(如?ArrayList)時。Java?提供了多種數組復制的方式,每種方式在性能和使用場景上都有所不同。以下是對幾種主要數組復制方式的比較,包括?System.arraycopy、Arrays.copyOf、Arrays.copyOfRange?和手動復制。

System.arraycopy

System.arraycopy?是?Java?提供的一個本地方法,用于高效地復制數組。它的語法如下:

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

特點

性能:System.arraycopy?是最優的數組復制方式,通常比其他方法快,因為它是用本地代碼實現的,能夠利用底層的內存操作。

靈活性:可以復制任意類型的數組(包括基本類型和對象數組)。

參數:

src:源數組

srcPos:源數組的起始位置

dest:目標數組

destPos:目標數組的起始位置

length:要復制的元素數量

?使用示例

int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[5];
System.arraycopy(src, 0, dest, 0, src.length);

Arrays.copyOf

Arrays.copyOf?是?java.util.Arrays?類中的一個靜態方法,用于復制數組并返回一個新數組。它的語法如下:

public static <T> T[] copyOf(T[] original, int newLength);
public static int[] copyOf(int[] original, int newLength);

特點

簡潔性:使用簡單,適合快速復制數組并調整大小。

性能:雖然性能較好,但通常不如?System.arraycopy?快,因為它涉及到創建新數組并復制元素。

返回新數組:返回一個新數組,原數組不受影響。

?使用示例

int[] src = {1, 2, 3, 4, 5};
int[] dest = Arrays.copyOf(src, src.length); // 復制整個數組

Arrays.copyOfRange

Arrays.copyOfRange?是?java.util.Arrays?類中的另一個靜態方法,用于復制數組的指定范圍。它的語法如下:

public static <T> T[] copyOfRange(T[] original, int from, int to);
public static int[] copyOfRange(int[] original, int from, int to);

特點

靈活性:可以復制數組的任意范圍,適合需要部分復制的場景。

性能:性能與?Arrays.copyOf?類似,通常不如?System.arraycopy?快。

返回數組:返回一個新數組,原數組不受影響。

手動復制?

手動復制是通過循環逐個元素復制數組的方式。

特點

靈活性:可以根據需要自定義復制邏輯。

性能:通常是最慢的方式,因為它涉及到?Java?層面的循環操作。

適用場景:適合需要復雜邏輯的復制場景。

使用示例

int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[src.length];
for (int i = 0; i < src.length; i++) {dest[i] = src[i];
}

性能比較

System.arraycopy最快,底層實現,適合大規模復制

?Arrays.copyOf?較快,簡潔,返回新數組,需要調整大小的數組復制?

Arrays.copyOfRange較快,靈活,返回新數組,需要部分復制的數組

手動復制最慢,適合復雜邏輯 ,?需要自定義復制邏輯的場景

總結

選擇合適的方法:在選擇數組復制方法時,應根據具體需求和性能要求進行選擇。對于大規模數組復制,推薦使用?System.arraycopy;對于簡單的數組復制,而手動復制適合需要復雜邏輯的場景。

性能考慮:在性能敏感的應用中,盡量避免使用手動復制,優先考慮使用?System.arraycopy。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64251.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64251.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64251.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

視頻會議是如何實現屏幕標注功能的?

現在主流的視頻會議軟件都有屏幕標注功能&#xff0c;屏幕標注功能給屏幕分享者講解分享內容時提供了極大的方便。那我們以傲瑞視頻會議&#xff08;OrayMeeting&#xff09;為例&#xff0c;來講解屏幕標注是如何實現的。 傲瑞會議的PC端&#xff08;Windows、信創Linux、銀河…

Framework開發入門(一)之源碼下載

一、使用Linux操作系統的小伙伴可以跳轉到官網鏈接按提示操作 官網源碼地址&#xff1a;下載源代碼 | Android Open Source Project 1.創建一個空目錄來存放您的工作文件。為其指定一個您喜歡的任意名稱&#xff1a; mkdir WORKING_DIRECTORYcdWORKING_DIRECTORY …

改進爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)

概率爬山法(Probabilistic Hill Climbing,PHC)是一種局部搜索算法,它結合了隨機性和貪婪搜索的特點,是對爬山算法(Hill Climbing Algorithm)的一種變體或擴展。與傳統的爬山法不同,PHC不是總是選擇最優的鄰居作為下一步的移動,而是以一定的概率選擇最優鄰居,同時以一…

Unity中實現人物殘影效果

今天火柴人聯盟3公測了&#xff0c;看到一個殘影的效果&#xff0c;很有意思&#xff0c;上網查詢了一下實現方式&#xff0c; 實現思路&#xff1a; 將角色的網格復制出來&#xff0c;然后放置到新建的物體的MeshFilter組件上&#xff0c;每隔幾十毫秒在玩家的位置生成一個&a…

C#實現調用DLL 套殼讀卡程序(桌面程序開發)

背景 正常業務已經支持 讀三代卡了&#xff0c;前端調用醫保封裝好的服務就可以了&#xff0c;但是長護要讀卡&#xff0c;就需要去訪問萬達&#xff0c;他們又搞了一套讀卡的動態庫&#xff0c;為了能夠掉萬達的接口&#xff0c;就需要去想辦法調用它們提供的動態庫方法&…

自動擋有什么優勢

自動擋汽車相比手動擋汽車具有多方面的優勢&#xff0c;以下是對這些優勢的詳細闡述&#xff1a; 一、操作簡便性 無需手動換擋&#xff1a;自動擋汽車不需要駕駛員手動操作離合器和換擋桿&#xff0c;只需通過油門和剎車踏板來控制車速&#xff0c;大大降低了駕駛難度。這使…

菜鳥帶新鳥——基于EPlan2022的部件庫制作(3D)

設備邏輯的概念&#xff1a; 可在布局空間 中和其它對象上放置對象。可將其它對象放置在 3D 對象上。已放置的對象分到組件的邏輯結構中。 將此屬性的整體標識為設備邏輯。可使用不同的功能創建和編輯設備邏輯。 設備的邏輯定義 定義 / 旋轉 / 移動 / 翻轉&#xff1a;組…

小程序基礎 —— 07 創建小程序項目

創建小程序項目 打開微信開發者工具&#xff0c;左側選擇小程序&#xff0c;點擊 號即可新建項目&#xff1a; 在彈出的新頁面&#xff0c;填寫項目信息&#xff08;后端服務選擇不使用云服務&#xff0c;開發模式為小程序&#xff0c;模板選擇為不使用模板&#xff09;&…

Android Java 版本的 MSAA OpenGL ES 多重采樣

最近多次被小伙伴問到 OpenGL 多重采樣&#xff0c;其實前面文章里多次講過了&#xff0c;就是構建2個緩沖區&#xff0c;多重采樣緩沖區和目標解析緩沖區。 代碼流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…

Markdown語法字體字號講解

學習目錄 語法詳解改變字體樣式[電腦要自帶該樣式字體]改變局部字號全局字體字號的設置使用場景及應用實例 > 快來試試吧&#x1f603; &#x1f447; &#x1f447; &#x1f448;點擊該圖片即可跳轉至Markdown學習網站進行 Markdown語法字體字號講解&#x1f448;點擊這里…

Spring boot處理跨域問題

Spring boot處理跨域問題 方案一方案二推薦解決方案注意 方案一 實現WebMvcConfigurer的addCorsMappings方法 Configuration public class InterceptorConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMappin…

TOTP雙因素認證(2FA)php簡單實現

TOTP身份驗證的工作原理基于時間戳和密鑰。用戶需要在設置階段將密鑰與相應的身份驗證器進行綁定。通常&#xff0c;用戶會在需要使用TOTP動態驗證碼的APP或網站上獲得一個密鑰&#xff0c;然后將該密鑰添加到TOTP驗證器工具上。驗證器會根據當前的時間戳和密鑰生成一個一次性密…

day21——web自動化測試(3)Unittest+Selenium實戰小案例

【沒有所謂的運氣&#x1f36c;&#xff0c;只有絕對的努力?】 目錄 今日目標&#xff1a; 1、UnitTest框架 2、UnitTest 核心用例 2.1 TestCase 2.2 TestSuite 2.3 TestRunner 2.4 TestLoader 2.5 TestLoader 與 TestSuite的區別 2.6 Fixture 3、斷言 3.1 1230…

【Flink運行時架構】系統構架

SMP架構 數據處理系統的架構最簡單的實現方式就是單節點&#xff0c;但是隨著數據量的增大&#xff0c;為了使單節點的機器性能更加強大&#xff0c;需要增加CPU數量和加大內存來提高吞吐量。這就是所謂的SMP(Symmetrical Multi Processing,對稱多處理)架構。 但是這種架構帶來…

CountDownLatch應用舉例

定義 CountDownLatch是juc下的一個多線程鎖&#xff0c;下面是jdk對它的定義 A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. 翻譯如下 一種同步輔助工具&#xff0c;允許一個或多個…

ADC(二):外部觸發

有關ADC的基礎知識請參考標準庫入門教程 ADC&#xff08;二&#xff09;&#xff1a;外部觸發 1、TIM1的CC1事件觸發ADC1DMA重裝載2、TIM3的TRGO事件(的更新事件)觸發ADC1DMA重裝載3、TIM3的TRGO事件(的捕獲事件)觸發ADC1DMA重裝載4、優化TIM3的TRGO事件(的捕獲事件)觸發ADC1D…

磁盤分區格式

MBR和GPT ?磁盤分區形式主要有兩種&#xff1a;MBR和GPT。?? MBR&#xff08;Master Boot Record&#xff09; MBR是一種較舊的分區形式&#xff0c;首次引入于1983年的IBM PC DOS 2.0。它位于驅動器的第一個扇區&#xff0c;包含460字節的引導代碼、64字節的磁盤分區表和…

幾個支持用戶名密碼的代理鏈工具: glider, gost, proxychains+microsocks

幾個支持用戶名密碼的代理鏈工具: glider, gost, proxychainsmicrosocks gost -L:7777 -Fsocks5://192.168.2.20:7575 -Fsocks5://user:passwd1.1.1.1:10086 -Dgost&#xff1a;(https://github.com/ginuerzh/gost) 參考 https://www.quakemachinex.com/blog/279.html

量子退火與機器學習(1):少量數據求解未知QUBO矩陣,以少見多

文章目錄 前言ー、復習QUBO&#xff1a;中藥配伍的復雜性1.QUBO 的介入&#xff1a;尋找最佳藥材組合 二、難題&#xff1a;QUBO矩陣未知的問題1.為什么這么難&#xff1f; 三、稀疏建模(Sparse Modeling)1. 欠定系統中的稀疏解2. L1和L2的選擇&#xff1a; 三、壓縮感知算法(C…

【連續學習之SSL算法】2018年論文Selfless sequential learning

1 介紹 年份&#xff1a;2018 期刊&#xff1a; arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一種名為SLNID&#xff08;Sparse coding through Local Neural Inhibition and…