मैं Concurrenthashmap का उपयोग कर रहा हूं जो वस्तुओं को संग्रहीत करता है। मैं उस वस्तु को प्राप्त करना चाहता हूं और हैशपैप को संशोधित किए बिना इसे संशोधित करना चाहता हूं। मैं यह कैसे करु? मेरा कोड निम्नलिखित है:
ConcurrentHashMap<String,Employee> dataStorage = new
ConcurrentHashMap<String,Employee>(10000);
dataStorage.put("Employee1", Employee1);
मैंने हैश मैप में कर्मचारी प्रकार का एक ऑब्जेक्ट जोड़ा था। अब जब मैं एक get . करता हूँ
Employee employee1 = dataStorage.get("Employee1");
अगर मैं employee1
को संशोधित करता हूं, तो अपडेट की गई वस्तु HashMap
में संग्रहीत हो जाती है
मैं HashMap
में संग्रहीत मूल्य को प्रभावित किए बिना employee1
को कैसे संशोधित करूं?
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()
का उपयोग कर सकते हैं।
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
ऑब्जेक्ट में कुछ संशोधन करते हैं जो आपको सीधे हैशमैप से मिलता है, तो यह वहां "स्टिक" रहेगा। जावा का उपयोग करते हुए मेरे जीवन के दौरान, यह व्यवहार आमतौर पर वही रहा है जो मैं चाहता था लेकिन उम्मीद है कि यह उत्तर आपके लिए विचार करने के लिए एक समाधान है।
Employee Employee2 = Employee1.clone();
dataStorage.put("Employee1", Employee2);
मुझे उम्मीद है कि यह काम करेगा।
ConcurrentHashMap<String,Employee> dataStorage = new
ConcurrentHashMap<String,Employee>(10000);
dataStorage.put("Employee1", Employee1.clone());
In most of the cases, the shallow copy should work.
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।