成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

System.arraycopy方法的簡(jiǎn)短總結(jié)

Michael_Lin / 3604人閱讀

摘要:相比遍歷復(fù)制,此方法更加高效。原因很簡(jiǎn)單,該方法使用內(nèi)存塊整體讀取與復(fù)制,相比的遍歷尋址來說自然會(huì)快,不過這個(gè)速度優(yōu)勢(shì)在數(shù)組成員比較多的時(shí)候才會(huì)有較明顯的體現(xiàn)。下面貼出方法中關(guān)鍵部分的方法代碼

API使用場(chǎng)景

在JDK研發(fā)團(tuán)隊(duì)的開發(fā)過程中,對(duì)集合的操作過程中常會(huì)使用到此方法。

API參數(shù)
public static native void arraycopy(
       Object src,  //源數(shù)組
       int srcPos,  //源數(shù)組的讀取起始位置
       Object dest, //目標(biāo)數(shù)組
       int destPos, //目標(biāo)數(shù)據(jù)中的寫入起始位置
       int length   //要復(fù)制的數(shù)組元素的數(shù)量
       );
Functions

將指定源數(shù)組的數(shù)組從指定位置復(fù)制到目標(biāo)數(shù)組的指定位置。數(shù)組組件的子序列由src引用的源數(shù)組復(fù)制到dest引用的目標(biāo)數(shù)組。復(fù)制的組件數(shù)等于length。源序列中從srcPos到srcPos+length-1的序列復(fù)制到目標(biāo)序列的destPos到destPos+length-1位置。

如果src和dest參數(shù)引用的是相同的數(shù)組對(duì)象,則首先把源數(shù)組srcPos到srcPos+length-1的組件復(fù)制到具有與此相同長(zhǎng)度的臨時(shí)數(shù)組里,然后再把臨時(shí)數(shù)組的內(nèi)容復(fù)制到目標(biāo)數(shù)組destPos到destPos+length-1位置。

如果dest為null,則拋出NullPointerException;如果src為空,則拋出NullPointerException,并且不修改目標(biāo)數(shù)組。

拋出ArrayStoreException的情況(前7種情況不會(huì)修改dest):
1)src參數(shù)指向的不是數(shù)組對(duì)象
2)dest參數(shù)指向的不是數(shù)組對(duì)象
3)src參數(shù)和dest參數(shù)指向的對(duì)象類型不是同一種基本類型的數(shù)組
4)src參數(shù)指向由原始組件類型組成的數(shù)組,dest參數(shù)指向由引用組件類型組成的數(shù)組
5)dest參數(shù)指向由原始組件類型組成的數(shù)組,src參數(shù)指向由引用組件類型組成的數(shù)組
6)srcPos+length>src.length
7)destPos+length>dest.length
8)對(duì)于任意i滿足:srcPos <= i <= (srcPos+length-1),src.get(i)無法轉(zhuǎn)換為dest的成員類型。(這種情況下,令k為小于length的非負(fù)整數(shù),假設(shè)此時(shí)使src[srcPos+k]不能轉(zhuǎn)換為目標(biāo)數(shù)組的成員類型,當(dāng)拋異常時(shí)srcPos到srcPos+k-1的源數(shù)組成員已經(jīng)通過destPos+k-1被復(fù)制到目標(biāo)數(shù)組的destPos位置,目標(biāo)數(shù)組的剩余位置不會(huì)被修改。這種情況僅適用于兩個(gè)數(shù)組都具有引用類型的成員類型的情況)

方法特性

1、總的來說,復(fù)制方式屬于淺復(fù)制

復(fù)制的過程只是引用變量的二次傳遞。

一維數(shù)組的復(fù)制:屬性值傳遞,修改則不會(huì)影響副本

二維數(shù)組的復(fù)制:復(fù)制的是第一維的引用列表,副本和原數(shù)組的指向是相同的堆地址,這個(gè)時(shí)候,值變動(dòng)的影響是雙向的

2、此方法不是線程安全的,必要時(shí)要加鎖限制。
3、相比for遍歷復(fù)制,此方法更加高效。

原因很簡(jiǎn)單,該方法使用內(nèi)存塊整體讀取與復(fù)制,相比for的遍歷尋址來說自然會(huì)快,不過這個(gè)速度優(yōu)勢(shì)在數(shù)組成員比較多的時(shí)候才會(huì)有較明顯的體現(xiàn)。下面貼出native方法中關(guān)鍵部分copy的方法c++代碼:

void _Copy_conjoint_jints_atomic(jint* from, jint* to, size_t count) {
    if (from > to) {
      jint *end = from + count;
      while (from < end)
        *(to++) = *(from++);
    }
    else if (from < to) {
      jint *end = from;
      from += count - 1;
      to   += count - 1;
      while (from >= end)
        *(to--) = *(from--);
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67899.html

相關(guān)文章

  • 從源碼看Java集合之ArrayList

    摘要:集合之吃透增刪查改從源碼看初始化以及增刪查改,學(xué)習(xí)。一初始化無參的構(gòu)造器可以看到這個(gè)構(gòu)造器初始化了一個(gè)空數(shù)組。指定長(zhǎng)度的構(gòu)造器這個(gè)構(gòu)造器顯式的指明了數(shù)組的長(zhǎng)度,其實(shí)如果小于的話,在添加第一個(gè)元素的時(shí)候還是會(huì)擴(kuò)充到長(zhǎng)度為的數(shù)組。 Java集合之ArrayList - 吃透增刪查改 從源碼看初始化以及增刪查改,學(xué)習(xí)ArrayList。 先來看下ArrayList定義的幾個(gè)屬性: priva...

    seasonley 評(píng)論0 收藏0
  • Java 面試準(zhǔn)備

    摘要:網(wǎng)站的面試專題學(xué)習(xí)筆記非可變性和對(duì)象引用輸出為,前后皆有空格。假定??臻g足夠的話,盡管遞歸調(diào)用比較難以調(diào)試,在語(yǔ)言中實(shí)現(xiàn)遞歸調(diào)用也是完全可行的。棧遵守規(guī)則,因此遞歸調(diào)用方法能夠記住調(diào)用者并且知道此輪執(zhí)行結(jié)束之返回至當(dāng)初的被調(diào)用位置。 ImportNew 網(wǎng)站的Java面試專題學(xué)習(xí)筆記 1. 非可變性和對(duì)象引用 String s = Hello ; s += World ; s.tr...

    chanjarster 評(píng)論0 收藏0
  • System.arraycopy方法解釋

    摘要:源數(shù)組源數(shù)組要復(fù)制的起始位置目標(biāo)數(shù)組將原數(shù)組復(fù)制到目標(biāo)數(shù)組目標(biāo)數(shù)組起始位置從目標(biāo)數(shù)組的哪個(gè)下標(biāo)開始復(fù)制操作復(fù)制源數(shù)組的長(zhǎng)度例子如下源數(shù)組為目標(biāo)數(shù)組為開始執(zhí)行數(shù)組復(fù)制操作將源數(shù)組從數(shù)組下標(biāo)開始的位長(zhǎng)度的數(shù)組復(fù)制到目標(biāo)數(shù)組從下標(biāo)為的位置開始復(fù)制 **/* * @param src the source array.源數(shù)組 * @param srcPos ...

    yexiaobai 評(píng)論0 收藏0
  • 數(shù)組

    摘要:二數(shù)組擴(kuò)容及拷貝數(shù)組的擴(kuò)容數(shù)組是根據(jù)固定容量創(chuàng)建的,在必要的時(shí)候我們需要對(duì)數(shù)組進(jìn)行擴(kuò)容初始長(zhǎng)度為下面決定需要對(duì)數(shù)組進(jìn)行擴(kuò)容對(duì)原數(shù)組進(jìn)行內(nèi)容拷貝在對(duì)數(shù)組進(jìn)行拷貝時(shí)除了利用循環(huán)遍歷數(shù)組元素進(jìn)行拷貝外,推薦使用更高效的方法。 PS:如果覺得文章有什么地方寫錯(cuò)了,哪里寫得不好,或者有什么建議,歡迎指點(diǎn)。 一、認(rèn)識(shí)數(shù)組 數(shù)組是一種線性表數(shù)據(jù)結(jié)構(gòu)。它用一塊連續(xù)的內(nèi)存空間,來存儲(chǔ)相同類型的一組數(shù)據(jù)。...

    Yuqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<