मैं Concurrenthashmap का उपयोग कर रहा हूं जो वस्तुओं को संग्रहीत करता है। मैं उस वस्तु को प्राप्त करना चाहता हूं और हैशपैप को संशोधित किए बिना इसे संशोधित करना चाहता हूं। मैं यह कैसे करु? मेरा कोड निम्नलिखित है:

ConcurrentHashMap<String,Employee> dataStorage = new 
ConcurrentHashMap<String,Employee>(10000);
dataStorage.put("Employee1", Employee1);

मैंने हैश मैप में कर्मचारी प्रकार का एक ऑब्जेक्ट जोड़ा था। अब जब मैं एक get . करता हूँ

Employee employee1 = dataStorage.get("Employee1");

अगर मैं employee1 को संशोधित करता हूं, तो अपडेट की गई वस्तु HashMap में संग्रहीत हो जाती है

मैं HashMap में संग्रहीत मूल्य को प्रभावित किए बिना employee1 को कैसे संशोधित करूं?

0
subbaraoc 11 सितंबर 2017, 09:05

4 जवाब

सबसे बढ़िया उत्तर

आप ऑब्जेक्ट की एक गहरी प्रतिलिपि बना सकते हैं employee यानी वास्तव में employee ऑब्जेक्ट के मेमोरी लोकेशन को पास करने के बजाय एक नया ऑब्जेक्ट बना सकते हैं।

डीप कॉपी के बारे में अधिक जानने के लिए पढ़ें यहां।

आप इसे कुछ इस तरह का उपयोग करके कर सकते हैं:

/**
   * This method makes a "deep clone" of any object it is given.
   */
  public static Object deepClone(Object object) {
    try {
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      ObjectOutputStream oos = new ObjectOutputStream(baos);
      oos.writeObject(object);
      ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
      ObjectInputStream ois = new ObjectInputStream(bais);
      return ois.readObject();
    }
    catch (Exception e) {
      e.printStackTrace();
      return null;
    }
  }
}

अधिक जानकारी के लिए आप यहां पढ़ सकते हैं।

इसके अलावा आप क्लोनेबल को लागू करके clone() का उपयोग कर सकते हैं।

clone() या यहां

2
Pritam Banerjee 11 सितंबर 2017, 09:18

Employee ऑब्जेक्ट की एक डीप कॉपी बनाएं। यहां एक संभावना यह होगी कि आप अपने Employee वर्ग में एक कॉपी कंस्ट्रक्टर को जोड़ें, जो खेतों में कॉपी करता है:

class Employee {
    private String name;
    private int ID;
    // other fields...

    public Employee(Employee other) {
        this.name = other.name;
        this.ID = other.ID;
        // ...
    }
}

जैसा कि आपने सही ढंग से देखा है, यदि आप Employee ऑब्जेक्ट में कुछ संशोधन करते हैं जो आपको सीधे हैशमैप से मिलता है, तो यह वहां "स्टिक" रहेगा। जावा का उपयोग करते हुए मेरे जीवन के दौरान, यह व्यवहार आमतौर पर वही रहा है जो मैं चाहता था लेकिन उम्मीद है कि यह उत्तर आपके लिए विचार करने के लिए एक समाधान है।

0
Tim Biegeleisen 11 सितंबर 2017, 09:11
Employee Employee2 = Employee1.clone();
dataStorage.put("Employee1", Employee2);

मुझे उम्मीद है कि यह काम करेगा।

0
naimul64 11 सितंबर 2017, 09:34
ConcurrentHashMap<String,Employee> dataStorage = new 
ConcurrentHashMap<String,Employee>(10000);
dataStorage.put("Employee1", Employee1.clone());

In most of the cases, the shallow copy should work.
-1
Ashish Shukla 11 सितंबर 2017, 09:15