एकमात्र विकल्प Arrays#copyOf()
है (जो हुड के नीचे System#arrayCopy()
का उपयोग करता है)।
बस इसका परीक्षण करें।
package com.stackoverflow.q2830456;
import java.util.Arrays;
import java.util.Random;
public class Test {
public static void main(String[] args) throws Exception {
Random random = new Random();
int[] ints = new int[100000];
for (int i = 0; i < ints.length; ints[i++] = random.nextInt());
long st = System.currentTimeMillis();
test1(ints);
System.out.println(System.currentTimeMillis() - st);
st = System.currentTimeMillis();
test2(ints);
System.out.println(System.currentTimeMillis() - st);
}
static void test1(int[] ints) {
for (int i = 0; i < ints.length; i++) {
ints.clone();
}
}
static void test2(int[] ints) {
for (int i = 0; i < ints.length; i++) {
Arrays.copyOf(ints, ints.length);
}
}
}
20203
20131
और जब test1()
और test2()
लगा दिया जाता था:
20157
20275
अंतर नगण्य है। मैं कहूंगा, बस clone()
के लिए जाएं क्योंकि यह बेहतर पठनीय है और Arrays#copyOf()
केवल जावा 6 है।
नोट: वास्तविक परिणाम मंच पर निर्भर हो सकता है और JVM इस्तेमाल किया, यह इंटेल P8400, 4GB PC2-6400 रैम, WinXP के साथ एक Dell अक्षांश E5500 पर परीक्षण किया गया था, JDK 1.6.0_17_b04
वास्तव में अजीब ... मैंने जो लेख पोस्ट किया है, उसकी प्रतिलिपि है क्लोन की तुलना में 2x धीमी गति से घड़ी .. दुख की बात है कि मेरे पास इस मशीन पर जेडीके नहीं है या मैं खुद को एक परीक्षण चलाने में सक्षम हूं। लेकिन वैसे भी अपना खुद का परीक्षण करने के लिए +1। – jonathanasdf
मुझे इसे मारो। बस अपना खुद का परीक्षण चलाने वाला था। @ बालुससी, अगर यह यादृच्छिक मूल्यों के साथ चलाया जाता है तो क्या होगा? उम्मीद न करें कि यह वास्तव में कोई फर्क नहीं पड़ेगा, लेकिन जिस सरणी को आप क्लोनिंग कर रहे हैं वह समान रूप से वितरित किया जाता है। – Finbarr
@ जोनाथन: मई प्लेटफार्म और जेवीएम पर निर्भर हो सकता है। – BalusC