java中for迴圈複製陣列和使用Arrays copyOf哪個快?

時間 2021-05-11 13:55:24

1樓:Ryan Chang

吃不準就做個測試......

long

start1

=System

.currentTimeMillis

();int

arrayOrg

=new

int[

1000000

];Random

rand

=new

Random

(System

.currentTimeMillis

());

for(

inti=0

;i

.length;i

++)long

end1

=System

.currentTimeMillis

();System

.out

.println

((end1

-start1)+

" ms"

);long

start2

=System

.nanoTime

();int

aryCopy2

=new

int[

1000000

];for

(inti=

0;i<

arrayOrg

.length;i

++)long

end2

=System

.nanoTime

();System

.out

.println

(end2

-start2

);long

start

=System

.nanoTime

();int

aryCopy

=Arrays

.copyOf

(arrayOrg

,arrayOrg

.length

);long

end=

System

.nanoTime

();System

.out

.println

(end

-start

);如果是物件的話

long

start1

=System

.currentTimeMillis

();TestMyObj

arrayOrg

=new

TestMyObj

[1000000

];Random

rand

=new

Random

(System

.currentTimeMillis

());

for(

inti=0

;i

.length;i

++)long

end1

=System

.currentTimeMillis

();System

.out

.println

((end1

-start1)+

" ms"

);long

start2

=System

.currentTimeMillis

();for

(intk=

0;k<10;

k++)

}long

end2

=System

.currentTimeMillis

();System

.out

.println

((end2

-start2)+

"ms"

);long

start

=System

.currentTimeMillis

();for

(intk=

0;k<10;

k++)

long

end=

System

.currentTimeMillis

();System

.out

.println

((end

-start)+

"ms"

);class

TestMyObj

目測大型陣列的話,分基礎型別和複雜物件,略微有些區別,另外跟拷貝的次數也有一些關係,比如同樣的陣列拷貝多次,就算是用for迴圈,恐怕JIT還是會有優化的也許差距就沒有比直接呼叫Native慢多少。如果是物件型別的話,因為Arrays.copyOf的實現使用了泛型,在執行期涉及到型別轉換,又有一筆開銷

總的來說還是Arrays.copyOf快

2樓:羅俊俊

其實不能以偏概全,如果arraylist設定容量,如果迴圈是用的index方式,利用arraylist實現了隨機儲存介面的特點還是for快點,btw你這個問題本身就有問題,相信你是個小夥子,記住一句話世上沒有絕對的事!!!

3樓:斯巴拉西

copyOf呼叫了native方法System.arraycopy,我相信要比普通的for迴圈快一點

ArrayList內部的陣列複製也是使用System.arraycopy

Java中foreach為什麼不能給陣列賦值?

顏欽能 給你舉乙個例子,你看一下可能比較能理解 for int element array1 question 為什麼用Foreach無法給陣列賦值element r.nextInt 101 1 System.out.println element 雖然可以輸出十個隨機數,但並沒有把十個隨機數賦給a...

Java 中iterator和iterable的關係是怎樣的?有何意義?

黃美英 乙個是迭代方法介面,乙個是迭代器 類 介面。迭代方法Iterator 實現hasNext 和 next 就這倆方法,其他啥也沒了。迭代器介面iterable 負責持續返回可以實現迭代方法的乙個類,有個這個類,自然可以且必須實現迭代方法。當乙個集合想要遍歷,你是需要迭代方法呢?還是持續返回乙個...

Java中synchronized鎖和Lock鎖在CPU層的實現,或者說在JVM層的實現是否是一致的?

蘇維 這兩個東西實現的原語不一樣,一種是mutex原語,一種是monitor原語,原語決定了用途,怎麼實現反而是次要的,隨時都能改。 wuxinliulei 不能完全這麼說,因為synchronized鎖在jdk1.6之後優化為偏向鎖,輕量級鎖,重量級鎖三種形態,CAS的使用是輕量級鎖,重量級鎖的實...