1. 程式人生 > >java語言復制數組的四種方法

java語言復制數組的四種方法

原生態 png mit 宋體 angle 連接 earch oat nowrap

參考: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語言寫的,而是調用其他語言的代碼,因此效率最高

  1. public static void native arraycopy(Object src,
  2.    int srcPos,
  3. Object dest,
  4. int destPos,
  5. 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

相關文章推薦
  • ? java中的clone()方法的研究---(8)如何編寫正確的clone()方法:數組類型
  • ? Presto服務治理與架構優化在京東的實踐應用--王哲涵
  • ? JAVA中復制數組的五種方法
  • ? 【免費直播】Python最佳學習路線--韋瑋
  • ? Java數組拷貝/復制的效率比較
  • ? JS-SDK開發與微信支付
  • ? java 使用arraycopy拷貝數組
  • ? Spring Cloud微服務真實場景實戰解析
  • ? Java中數組復制的幾種方法
  • ? 10小時深入掌握 Kubernetes
  • ? Java數組拷貝的四種方法
  • ? JDK9新特性
  • ? Java方法之--System.arraycopy方法和Arrays.copyOf()
  • ? JAVA中復制數組的方法
  • ? java復制數組的四種方法
  • ? java中接口的屬性、方法的默認修飾符和類的屬性、訪問修飾符的區別
查看評論
2樓 qq_26222859 2016-09-29 16:46發表 [回復]
技術分享
跟樓主一起加油,本人也是應屆畢業生
1樓 於亦兒 2016-09-09 18:08發表 [回復]
技術分享
你也在找工作嗎
Re: 亭之翼 2016-09-12 10:08發表 [回復]
技術分享
回復於亦兒:是的呢,應屆畢業生
發表評論
  • 用 戶 名:
  • qq_36615307
  • 評論內容:
  • 技術分享
* 以上用戶言論只代表其個人觀點,不代表CSDN網站的觀點或立場
    個人資料
技術分享
亭之翼 技術分享
    • 訪問: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...

公司簡介|招賢納士|廣告服務|聯系方式|版權聲明|法律顧問|問題報告|合作夥伴|論壇反饋
網站客服雜誌客服微博客服[email protected]400-660-0108|北京創新樂知信息技術有限公司 版權所有|江蘇知之為計算機有限公司|江蘇樂知網絡技術有限公司

java語言復制數組的四種方法