java語言復制數組的四種方法
參考:http://www.cnblogs.com/dream-it-possible/p/7018804.html
來源於牛客網的一道選擇題:
JAVA語言的下面幾種數組復制方法中,哪個效率最高?
A.for循環逐一復制
B.System.arraycopy
C.System.copyof
D.使用clone方法
效率:System.arraycopy > clone > Arrays.copyOf > for循環
1、System.arraycopy的用法:
其為native方法,即原生態方法,關鍵字native說明它不是用java語言寫的,而是調用其他語言的代碼,因此效率最高
- public static void native arraycopy(Object src,
- int srcPos,
- Object dest,
- int destPos,
- int length)
參數: src
- 源數組。
srcPos
- 源數組中的起始位置。
dest
- 目標數組。
destPos
length
- 要復制的數組元素的數量
2、clone 的用法
Object.clone 從源碼來看同樣也是native方法,所以也是底層的C語言實現的,但返回為Object類型,所以賦值時將發生強轉,所以效率不如1 protected native Object clone() throws CloneNotSupportedException; 例:class Aby implements Cloneable{
public int i;
public Aby(int i) {
this.i = i;
}
@Override
public Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}
public class Solution {
public static void main(String[] args) throws CloneNotSupportedException {
Aby aby1 = new Aby(1);
Aby aby2 = (Aby) aby1.clone();
aby1.i = 2;
System.out.println(aby1.i); //2
System.out.println(aby2.i); //1
Aby[] arr = {aby1,aby2};
Aby[] arr2 = arr.clone();
arr2[0].i = 3;
System.out.println(arr[0].i); //3
System.out.println(arr2[0].i); //3
}
}
3、Arrays.copyOf 的用法:
有十種重載方法,復制指定的數組,返回原數組的副本。具體可以查看jdk api
java.util.Arrays.Arrays.copyOf(源數組,新數組長度);
java.util.Arrays.copyOfRange(源數組,開始拷貝位置,結束拷貝位置);
它的源代碼
+ View code
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;
}
實際上它調用的就是System.arraycopy。
4、for循環
代碼靈活,但效率低
4、Arrays.copyOf 的用法:
Arrays.copyOf有十種重載方法,復制指定的數組,返回原數組的副本。具體可以查看jdk api
- 頂
- 10
- 踩
- 1
相關文章推薦
- 2樓 qq_26222859 2016-09-29 16:46發表 [回復]
- 跟樓主一起加油,本人也是應屆畢業生
- 1樓 於亦兒 2016-09-09 18:08發表 [回復]
- 你也在找工作嗎
- Re: 亭之翼 2016-09-12 10:08發表 [回復]
- 回復於亦兒:是的呢,應屆畢業生
- 個人資料
亭之翼
- 訪問:166449次
- 積分:3332
- 等級:
- 排名:第10764名
- 原創:171篇
- 轉載:15篇
- 譯文:0篇
- 評論:11條
- 文章搜索
- 博客專欄
華為OJ——java筆試題匯總
文章:61篇 閱讀:37398 |
- 文章分類
- C#單片機串口通信(1)
- C#(21)
- 單片機/C51(2)
- Unity3D(2)
- SQL Server(10)
- Java(59)
- DevExpress(8)
- WPF(5)
- ASP.NET(4)
- 華為OJ系列(61)
- C++基礎(9)
- 計算機(1)
- 文章存檔
- 2017年08月(1)
- 2017年07月(11)
- 2016年09月(1)
- 2016年08月(76)
- 2016年07月(47)
- 閱讀排行
- java使用布局管理器制作用戶登錄界面(12406)
- java語言復制數組的四種方法(7313)
- java事件監聽學習——通過鍵盤方向鍵控制小球移動(6205)
- java集合——HashSet的用法(5600)
- java算法——分解質因數(5412)
- DEV系列--treeList用法(3885)
- Keil 警告:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS(3843)
- jdbc連接Mysql和SQLServer(Windows身份驗證)(3616)
- C#作為上位機,控制51單片機(下位機),串口通信源程序(3591)
- vs裏面添加DevExpress控件(3190)
- 評論排行
- java語言復制數組的四種方法(3)
- Unity3D中使用easyroad3d插件 刪除道路(2)
- java集合——HashSet的用法(1)
- C#作為上位機,控制51單片機(下位機),串口通信源程序(1)
- eclipse從Git獲取項目更新(1)
- 華為OJ——公共字串計算(1)
- java算法——分解質因數(1)
- DEV--chartcontrol繪制統計圖(1)
- c# 做的登錄窗體,登錄成功後當前登錄Form關閉,打開Main窗體,但Main窗體點關閉按鈕後程序仍在進程怎麽辦(0)
- C# TreeView從數據庫綁定數據(0)
- 推薦文章
- * 【觀點】第二十三期:程序員應該如何積累財富?
- * Android檢查更新下載安裝
- * 動手打造史上最簡單的 Recycleview 側滑菜單
- * TCP網絡通訊如何解決分包粘包問題
- * SDCC 2017之大數據技術實戰線上峰會
- * 快速集成一個視頻直播功能
- 最新評論
- eclipse從Git獲取項目更新
gnnn111: 樓主寫得比較簡潔,本文也不錯可以參考一下 http://www.marsitman.com/ecli...
- java算法——分解質因數
How_2_Play_Life: 解法有問題。試試36就不行了。
- java集合——HashSet的用法
北方小螞蟻: 這個小例子讓我對set不能add重復元素有了深刻了解,算是找到真正用到的地方了吧
- 華為OJ——公共字串計算
後來者511: 樓主,第二個循環要<=min.length才可以;
- C#作為上位機,控制51單片機(下位機),串口通信源程序
qq_28257415: 可以用定時器定時的給單片機點名,單片機就會有穩定的回復
- java語言復制數組的四種方法
qq_26222859: 跟樓主一起加油,本人也是應屆畢業生
- java語言復制數組的四種方法
亭之翼: @u012441545:是的呢,應屆畢業生
- java語言復制數組的四種方法
於亦兒: 你也在找工作嗎
- Unity3D中使用easyroad3d插件 刪除道路
wenliaolun: 加qq2796547646獲取最詳細教程和新版本的插件
- Unity3D中使用easyroad3d插件 刪除道路
wenliaolun: easyroad3d教學視頻觀看地址http://v.youku.com/v_show/id_XMT...
- 京 ICP 證 09002463 號|Copyright ? 1999-2017, CSDN.NET, All Rights Reserved
java語言復制數組的四種方法