Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

जावा में डीप कॉपी और शैलो कॉपी

डीप कॉपी और शैलो कॉपी दोनों दिए गए ऑब्जेक्ट की कॉपी बनाने के अलग-अलग तरीकों को संदर्भित करते हैं।

शैलो कॉपी

यह मूल रूप से ऑब्जेक्ट का एक नया इंस्टेंस बनाता है और मूल डेटा सेट से सभी डेटा को नव निर्मित इंस्टेंस में कॉपी करता है। इसका मतलब है कि नव निर्मित इंस्टेंस को मूल ऑब्जेक्ट में विशेष रूप से कास्ट करना पड़ता है। इसे 'शैलो क्लोनिंग' के रूप में भी जाना जाता है।

उदाहरण

import java.util.*; 

class Demo { 
    private int[] my_data; 
    
    public Demo(int[] my_vals) { 
        my_data = my_vals;  // केवल रेफरेंस कॉपी
    } 
    
    public void displayData() { 
        System.out.println(Arrays.toString(my_data)); 
    } 
} 

public class UseDemo { 
    public static void main(String[] args) { 
        int[] my_vals = {56, 89, 91}; 
        Demo my_inst = new Demo(my_vals); 
        my_inst.displayData(); 
        my_vals[0] = 65;  // मूल ऐरे में परिवर्तन
        my_inst.displayData();  // प्रभावित होता है!
    } 
}

आउटपुट

[56, 89, 91] 
[65, 89, 91]

व्याख्या: Demo क्लास में एक वेरिएबल, और एक कंस्ट्रक्टर होता है जो ऐरे के तत्वों को एक नए ऐरे में कॉपी करता है। 'displayData' नामक एक अन्य फंक्शन इस डेटा ऐरे को प्रदर्शित करता है। मुख्य फंक्शन में, एक इंस्टेंस बनाया जाता है, ऐरे को परिभाषित किया जाता है, और फंक्शन को कॉल किया जाता है। सभी परिवर्तनों को प्रतिबिंबित करते हुए प्रासंगिक आउटपुट कंसोल पर प्रदर्शित होता है।

डीप कॉपी

यह तब उपयोग किया जाता है जब किसी अलग उद्देश्य या उपयोग के लिए डेटा की एक अलग कॉपी की आवश्यकता होती है। क्लास के सभी मेंबर्स को 'Cloneable' इंटरफेस को लागू करना होगा और 'clone' मेथड को ओवरराइड करना होगा।

उदाहरण

import java.util.*; 

class Demo { 
    private int[] my_data; 
    
    public Demo(int[] my_vals) { 
        my_data = new int[my_vals.length];  // नया ऐरे बनाएं
        for (int i = 0; i < my_data.length; i++) { 
            my_data[i] = my_vals[i];  // मान कॉपी करें
        } 
    } 
    
    public void displayData() { 
        System.out.println(Arrays.toString(my_data)); 
    } 
} 

public class UseDemo { 
    public static void main(String[] args) { 
        int[] my_vals = {56, 89, 91}; 
        Demo my_inst = new Demo(my_vals); 
        my_inst.displayData(); 
        my_vals[0] = 65;  // मूल ऐरे में परिवर्तन
        my_inst.displayData();  // अप्रभावित!
    } 
}

आउटपुट

[56, 89, 91] 
[56, 89, 91]

व्याख्या: Demo क्लास में एक वेरिएबल, और एक कंस्ट्रक्टर होता है जो ऐरे के माध्यम से पुनरावृति करता है, और इसे दूसरे ऐरे में कॉपी करता है। 'displayData' नामक एक अन्य फंक्शन इस डेटा ऐरे को प्रदर्शित करता है। मुख्य फंक्शन में, एक इंस्टेंस बनाया जाता है, ऐरे को परिभाषित किया जाता है, और फंक्शन को कॉल किया जाता है। सभी परिवर्तनों को प्रतिबिंबित करते हुए प्रासंगिक आउटपुट कंसोल पर प्रदर्शित होता है।

तुलना तालिका:

पहलूशैलो कॉपीडीप कॉपी
ऑब्जेक्ट रेफरेंससाझा करता हैनए ऑब्जेक्ट्स बनाता है
म्यूटेबल फील्ड्ससाझा (परिवर्तन प्रभावित करते हैं)स्वतंत्र (परिवर्तन अलग)
प्रदर्शनतेजधीमा
मेमोरीकमअधिक
कार्यान्वयनडिफ़ॉल्ट clone()कस्टम clone() या कॉपी कंस्ट्रक्टर

Cloneable के साथ डीप कॉपी:

class DeepCopyDemo implements Cloneable {
    private int[] data;
    
    public DeepCopyDemo(int[] data) {
        this.data = data.clone();
    }
    
    @Override
    protected DeepCopyDemo clone() throws CloneNotSupportedException {
        return (DeepCopyDemo) super.clone(); // प्रिमिटिव ऐरे के लिए काम करता है
    }
}
  1. जावा में मेमोराइजेशन (1D, 2D और 3D) डायनामिक प्रोग्रामिंग जावा में मेमोराइजेशन (1D, 2D और 3D) डायनामिक प्रोग्रामिंग

    मेमोराइजेशन डायनामिक प्रोग्रामिंग पर आधारित एक तकनीक है जिसका उपयोग रिकर्सिव एल्गोरिदम के प्रदर्शन को बेहतर बनाने के लिए किया जाता है, यह सुनिश्चित करके कि मेथड दिए गए इनपुट्स के समान सेट के लिए एक से अधिक बार न चले, प्रदान किए गए इनपुट्स के परिणामों का रिकॉर्ड रखकर (एक ऐरे में संग्रहीत)। मेमोराइजे

  1. Java में JTextArea की कट, कॉपी और पेस्ट कार्यक्षमता को कैसे डिसेबल करें? Java में JTextArea की कट, कॉपी और पेस्ट कार्यक्षमता को कैसे डिसेबल करें?

    एक JTextArea JTextComponent क्लास का एक सबक्लास है और यह टेक्स्ट प्रदर्शित करने या यूजर को टेक्स्ट दर्ज करने की अनुमति देने के लिए एक मल्टी-लाइन टेक्स्ट कंपोनेंट है। जब हम JTextArea की कार्यक्षमता को इम्प्लीमेंट करने का प्रयास कर रहे होते हैं तो JTextArea CaretListener इंटरफेस उत्पन्न कर सकता है। डि

  1. Java में JTextField की कट, कॉपी और पेस्ट कार्यक्षमता कैसे लागू करें? Java में JTextField की कट, कॉपी और पेस्ट कार्यक्षमता कैसे लागू करें?

    एक JTextField JTextComponent क्लास का एक उपवर्ग है जो टेक्स्ट की एकल लाइन के संपादन की अनुमति देता है। हम cut(), copy() और paste() विधियों का उपयोग करके JTextField घटक में कट, कॉपी और पेस्ट की कार्यक्षमता लागू कर सकते हैं। ये पहले से परिभाषित विधियाँ JTextFeild क्लास में हैं। सिंटैक्स public void c