java copy array how copy clone an array java
Arrays की नकल और क्लोनिंग पर यह ट्यूटोरियल जावा में एक सरणी को कॉपी करने के विभिन्न तरीकों पर चर्चा करता है:
यहां हम जावा सरणियों के कॉपी ऑपरेशन पर चर्चा करेंगे। जावा विभिन्न तरीके प्रदान करता है जिसमें आप सरणी तत्वों की प्रतियां बना सकते हैं। जैसा कि हम जानते हैं, जावा में, सरणियों में आदिम प्रकार या वस्तु या संदर्भ के तत्व हो सकते हैं।
आदिम प्रकारों की प्रतियाँ बनाते समय, कार्य आसान है, लेकिन जब वस्तुओं या संदर्भों की बात आती है, तो आपको इस बात पर ध्यान देने की आवश्यकता है कि क्या प्रतिलिपि गहरी है या उथली है।
=> यहाँ जावा शुरुआती गाइड पर एक नज़र रखना।
उथला प्रति तत्व की एक प्रति बनाता है। यह एक समस्या नहीं है जब आदिम डेटा प्रकार शामिल होते हैं। लेकिन जब संदर्भ शामिल होते हैं, तो एक उथली प्रतिलिपि केवल मूल्य की प्रतिलिपि बनाएगी और अंतर्निहित जानकारी की नहीं।
इस प्रकार, भले ही आपने तत्वों की प्रतियाँ बना ली हों, एक प्रति में परिवर्तन अन्य प्रतिलिपि में भी दिखाई देगा क्योंकि स्मृति स्थान साझा किए जाते हैं। इसे रोकने के लिए, आपको एक गहरी प्रतिलिपि के लिए जाना होगा जिसमें मेमोरी स्थान साझा नहीं किए गए हैं।
आप क्या सीखेंगे:
कॉपी और क्लोन जावा एरेज़
जावा आपको java.util या सिस्टम वर्ग द्वारा दी गई प्रत्यक्ष प्रतिलिपि विधि का उपयोग करके सरणियों की प्रतिलिपि बनाने की अनुमति देता है। यह एक क्लोन विधि भी प्रदान करता है जिसका उपयोग संपूर्ण सरणी को क्लोन करने के लिए किया जाता है।
इस ट्यूटोरियल में, हम कॉपिंग और क्लोनिंग एरे के निम्नलिखित तरीकों पर चर्चा करेंगे।
- पाश के लिए मैनुअल कॉपी का उपयोग करना
- System.arraycopy () का उपयोग करना
- Arrays.copyOf () का उपयोग करना
- Arrays.copyOfRange () का उपयोग करना
- Object.clone () का उपयोग करना
आइए ढूंढते हैं!!
मैनुअल लूपिंग फॉर लूप का उपयोग करना
आम तौर पर जब हम चर की नकल करते हैं, उदाहरण के लिए, ए और बी, तो हम प्रतिलिपि ऑपरेशन निम्नानुसार करते हैं:
ए = बी;
यदि हम सरणियों के लिए समान विधि लागू करते हैं तो यह सही ढंग से काम नहीं कर रहा है।
आइए एक प्रोग्रामिंग उदाहरण देखें।
public class Main { public static void main(String() args) { int intArray() = {12,15,17}; //print original intArray System.out.println('Contents of intArray() before assignment:'); for (int i=0; i आउटपुट:

उपरोक्त कार्यक्रम में, दो ऐरे हैं यानी इंट्रेयर और कॉपीअरे। कार्य intArray की सामग्री को copyArray में कॉपी करना है। ऐसा करने के लिए, स्टेटमेंट copyArray = intArray पेश किया जाता है। यहां क्या किया जाता है यह सरणी के संदर्भ निर्दिष्ट किए गए हैं। इसलिए यह वास्तविक नकल नहीं है।
उपरोक्त कथन के परिणामस्वरूप, अंतःप्रणाली की मेमोरी लोकेशन copyArray द्वारा भी साझा की जाती है। अब जब copyArray तत्व बढ़ा है, तो यह परिवर्तन intArray में भी परिलक्षित होता है। यह आउटपुट में दिखाया गया है।
इस समस्या को दूर करने के लिए, हम लूप का उपयोग करके सरणी को कॉपी करने का एक तरीका नियुक्त करते हैं। यहां, लूप के लिए मूल सरणी के प्रत्येक तत्व को नए ऐरे से कॉपी किया जाता है।
यह कार्यक्रम नीचे दिखाया गया है।
public class Main { public static void main(String() args) { int intArray() = {12,15, 17}; // define an array copyArray to copy contents of intArray int copyArray() = new int(intArray.length); // copy contents of intArray to copyArray for (int i=0; i आउटपुट:

यहां हमने लूप के लिए और अंदर के लूप को शामिल करने के लिए पिछले प्रोग्राम को संशोधित किया है, हम इंट्रैरे के प्रत्येक तत्व को copyArray के संबंधित तत्व में असाइन करते हैं। इस तरह, तत्वों को वास्तव में कॉपी किया जाता है। इसलिए जब एक सरणी को संशोधित किया जाता है, तो परिवर्तन दूसरे सरणी में प्रतिबिंबित नहीं होते हैं।
System.arraycopy () का उपयोग करना
जावा के सिस्टम वर्ग में एक 'ArrayCOpy' नामक विधि है जो आपको एक सरणी के तत्वों को दूसरे सरणी में कॉपी करने की अनुमति देती है।
इस विधि का सामान्य प्रोटोटाइप इस प्रकार है:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
यहाँ,
- src_array => स्रोत सरणी जहां से सामग्री को कॉपी किया जाना है।
- src_Pos => स्रोत सरणी में स्थिति जहां से प्रतिलिपि प्रारंभ होगी।
- dest_array => डेस्टिनेशन एरे को किन तत्वों को कॉपी करना है।
- dest_Pos => प्रतिलिपि किए जाने वाले तत्वों के लिए गंतव्य सरणी में प्रारंभिक स्थिति।
- लंबाई => कॉपी की जाने वाली सरणी की लंबाई।
इस विधि को एक उदाहरण से समझते हैं।
class Main { public static void main(String() args) { //declaring a source array char() src_array = { 'S','o','f','t','w','a','r','e','T','e','s','t','i','n','g','H','e','l','p'}; char() dest_array = new char(19); System.arraycopy(src_array, 0, dest_array, 0,19); System.out.println('Source array:' + String.valueOf(src_array)); System.out.println('Destination array after arraycopy:'+ String.valueOf(dest_array)); } }
आउटपुट:

उपरोक्त कार्यक्रम में, हम किसी सरणी को दूसरे सरणी में कॉपी करने के लिए 'एरेस्कोपी' पद्धति का उपयोग करते हैं। आप अरकॉपी विधि के लिए कॉल देख सकते हैं। हम शुरुआत से स्रोत सरणी की प्रतिलिपि बनाते हैं (0)धस्थान) और पूरे सरणी की प्रतिलिपि बनाएँ।
अंत में, हम दोनों स्रोत और गंतव्य सरणियों के बराबर स्ट्रिंग प्रदर्शित करते हैं।
एरेस्कोपी पद्धति से, आप आंशिक सरणियों को भी कॉपी कर सकते हैं क्योंकि यह तर्कों के रूप में प्रारंभ और अंतिम तत्व स्थिति लेता है। यह विधि सरणी तत्वों की उथली प्रतिलिपि बनाती है।
Arrays.copyOf () का उपयोग करना
विधि Arrays.copyOf () आंतरिक रूप से System.arraycopy () विधि का उपयोग करती है। हालांकि यह एरेस्कोपी जितना कुशल नहीं है, लेकिन इसका इस्तेमाल एंस्कोपी पद्धति की तरह ही पूर्ण या आंशिक सरणी को कॉपी करने के लिए किया जा सकता है।
‘CopyOf () 'विधि java.util पैकेज का एक हिस्सा है और' Arrays 'वर्ग से संबंधित है।
इस विधि का प्रोटोटाइप इस प्रकार है:
public static int() copyOf(int() original_array,int newLength)
कहा पे,
- मूल: नए सरणी में कॉपी की जाने वाली सरणी।
- NewLength: कॉपी की गई सरणी की लंबाई लौटा दी जाएगी।
इस प्रकार, यह विधि पहले तर्क में प्रदान की गई सरणी की एक प्रति को निर्दिष्ट करती है, जिसमें लंबाई को 0 से नए सरणी के साथ छोटा या छोटा कर दिया जाता है। इसका मतलब यह है कि अगर कॉपी की गई सरणी की लंबाई मूल सरणी से अधिक है, तो 0 को शेष तत्वों के लिए बदल दिया जाता है।
नीचे दिया गया कार्यक्रम copyOf विधि का एक उदाहरण दिखाता है।
importjava.util.Arrays; public class Main { public static void main(String args()) { // define original array int() even_Array = new int() {2,4,6,8}; System.out.println('Original Array:' + Arrays.toString(even_Array)); // copying array even_Array to copy_Array int() copy_Array = Arrays.copyOf(even_Array,5); System.out.println('Copied Array:' + Arrays.toString(copy_Array)); // assign value to unassigned element of copied array copy_Array(4) = 10; System.out.println('Copied and modified Array:' + Arrays.toString(copy_Array)); } }
आउटपुट:

उपरोक्त कार्यक्रम में, हम copyOf विधि का उपयोग करके समरूप 4 लंबाई की प्रतिलिपि बनाते हैं। प्रदान किया गया दूसरा तर्क 5. इसलिए, नए कॉपी किए गए सरणी में 5 तत्व हैं। पहले चार मूल सरणी के समान हैं और पांचवा तत्व 0 है क्योंकि इसे कॉपीऑफ पैड कहते हैं क्योंकि मूल सरणी की लंबाई नए सरणी से कम है।
Arrays.copyOfRange () का उपयोग करना
विधि Arrays.copyOfRange () का उपयोग विशेष रूप से तब किया जाता है जब आप आंशिक सरणियों की प्रतिलिपि बनाना चाहते हैं। CopyOf () विधि की तरह, यह विधि भी आंतरिक रूप से System.arraycopy () विधि का उपयोग करती है।
Arrays.copyOfRange () पद्धति का प्रोटोटाइप निम्नानुसार है:
public static short() copyOfRange(short() original, int from, int to)
कहां है,
- मूल: वह सरणी जिससे कोई श्रेणी कॉपी की जानी है।
- से: प्रतिलिपि की जाने वाली श्रेणी का प्रारंभिक सूचकांक, समावेशी।
- सेवा मेरे: नकल की जाने वाली सीमा का अंतिम सूचकांक, अनन्य।
CopyOfRange पद्धति का एक उदाहरण कार्यान्वयन नीचे दिखाया गया है।
import java.util.Arrays; class Main { public static void main(String args()) { int intArray() = { 10,20,30,40,50 }; // to index is within the range int() copyArray = Arrays.copyOfRange(intArray, 2, 6); System.out.println('Array copy with both index within the range: ' + Arrays.toString(copyArray)); //to index is out of range int() copy1 = Arrays.copyOfRange(intArray, 4, intArray.length + 3); System.out.println('Array copy with to index out of range: ' + Arrays.toString(copy1)); } }
आउटपुट:

Object.clone () का उपयोग करना
जावा सरणी आंतरिक रूप से एक क्लोन करने योग्य इंटरफ़ेस को लागू करती है और इस प्रकार जावा सरणी को क्लोन करना आसान है। आप एक आयामी और साथ ही दो आयामी सरणियों को क्लोन कर सकते हैं। जब आप एक-आयामी सरणी को क्लोन करते हैं, तो यह सरणी तत्वों की एक गहरी प्रतिलिपि बनाता है जो मूल्यों की नकल कर रहा है।
दूसरी ओर, जब आप दो आयामी या बहुआयामी सरणियों को क्लोन करते हैं, तो तत्वों की एक उथली प्रतिलिपि बनाई जाती है यानी केवल संदर्भ की प्रतिलिपि बनाई जाती है। सरणियों का यह क्लोन सरणियों द्वारा प्रदान की गई (क्लोन () विधि द्वारा किया जाता है।
क्लोनिंग के परिणामस्वरूप 1-डी सरणियों की एक गहरी प्रतिलिपि को नीचे के रूप में दर्शाया जा सकता है:

अब जावा प्रोग्राम में 1-डी एरे क्लोनिंग को लागू करते हैं।
class Main { public static void main(String args()) { int num_Array() = {5,10,15,20,25,30}; int clone_Array() = num_Array.clone(); System.out.println('Original num_Array:'); for (int i = 0; i जैसा कि आप आउटपुट में देख सकते हैं, दोनों सरणियों की समानता की जांच करने के लिए अभिव्यक्ति झूठी है। ऐसा इसलिए है क्योंकि एक आयामी सरणी के क्लोनिंग के परिणामस्वरूप गहरी प्रतिलिपि मिलती है, जिसमें मानों को एक नए सरणी में कॉपी किया जाता है और न केवल संदर्भ।
बार बार पूछे जाने वाले प्रश्न
Q # 1) जावा में एरे की कॉपी कैसे बनायें?
उत्तर: किसी सरणी को कॉपी करने के लिए अलग-अलग तरीके हैं।
- आप एक के लिए एक के बाद एक लूप और कॉपी तत्वों के लिए उपयोग कर सकते हैं।
- किसी सरणी को क्लोन करने के लिए क्लोन विधि का उपयोग करें।
- सिस्टम क्लास की एरेस्कोपी () पद्धति का उपयोग करें।
- Arrays वर्ग के copyOf () या copyOfRange () विधियों का उपयोग करें।
Q # 2) आप एक सरणी को दूसरे को कैसे असाइन करते हैं?
उत्तर: आप एक साधारण असाइनमेंट ऑपरेटर (=) का उपयोग करके सरणी को दूसरे को असाइन कर सकते हैं। आपको यह सुनिश्चित करना होगा कि दो सरणियाँ एक ही डेटा प्रकार की हैं और एक समान आयाम हैं।
Q # 3) शॉल कॉपी और डीप कॉपी क्या है?
उत्तर: उथली प्रतिलिपि में, केवल वस्तुओं या सरणियों के गुणों को ही कॉपी किया जाता है। तो कॉपी किए गए सरणी में कोई भी परिवर्तन मूल में प्रतिबिंबित होगा। जावा क्लोनिंग एक उथली नकल का एक उदाहरण है।
वेब अनुप्रयोगों के लिए स्वचालित परीक्षण उपकरण
एक गहरी प्रति वह है जिसमें हमें उस वस्तु की पूरी प्रतिलिपि की आवश्यकता होती है ताकि जब हम उस वस्तु को क्लोन या कॉपी करें, तो वह एक स्वतंत्र प्रति हो। जब आदिम या बिल्ट-इन प्रकार शामिल होते हैं, तो उथले और गहरी प्रतिलिपि के बीच कोई अंतर नहीं होता है।
Q # 4) एक ऐरे क्लोन क्या करता है?
उत्तर: सरणियों की क्लोनिंग विधि का उपयोग एक वस्तु की विशेषताओं को दूसरे में कॉपी करने के लिए किया जाता है। यह ऐसा करने के लिए एक उथली प्रतिलिपि का उपयोग करता है।
Q # 5) क्या आप ऐरे में एक ऐरे स्टोर कर सकते हैं?
उत्तर: Arrays में एक ही प्रकार (आदिम या वस्तु) के तत्वों के साथ दिए गए सरणियाँ हो सकती हैं। इसका मतलब है कि आप एक पूर्णांक सरणी को एक स्ट्रिंग सरणी में संग्रहीत नहीं कर सकते।
निष्कर्ष
इस ट्यूटोरियल में, हमने जावा में कॉपी एरे और क्लोन एरे की खोज की। हमने एक सरणी को कॉपी और क्लोन करने के लिए विभिन्न तरीकों / दृष्टिकोणों को देखा है।
ध्यान दें कि इन तरीकों में से अधिकांश एक उथले प्रतिलिपि को लागू करते हैं। आदिम डेटा प्रकारों के लिए, उथली और गहरी प्रति अलग नहीं होती है। लेकिन जब किसी सरणी में ऑब्जेक्ट या संदर्भ होते हैं, तो प्रोग्रामर को आवश्यकताओं के अनुसार एक गहरी प्रतिलिपि लागू करने की आवश्यकता होती है।
हमारे बाद के ट्यूटोरियल में, हम जावा सरणियों के बारे में अधिक जानकारी प्राप्त करना जारी रखते हैं।
=> आसान जावा प्रशिक्षण श्रृंखला के माध्यम से पढ़ें।
अनुशंसित पाठ
- जावा सरणी कोड कोड के साथ लंबाई ट्यूटोरियल
- जावा जेनेरिक एरे - जावा में जेनेरिक एरे को कैसे अनुकरण करें?
- जावा ऐरे - जावा में ऐरे के तत्वों को कैसे प्रिंट करें?
- जावा में बहुआयामी एरर (2 डी और 3 डी एरेज़ जावा में)
- कैसे जावा में एक ऐरे पास / वापसी करें
- जावा में एक ऐरे को कैसे सॉर्ट करें - उदाहरणों के साथ ट्यूटोरियल
- जावा ऐरे - घोषणा, जावा में एक ऐरे को बनाएँ और आरम्भ करें
- जावा में एक ऐरे से एक तत्व निकालें / हटाएं