मुझे जावा ArrayList
की उथली प्रतिलिपि की आवश्यकता है, क्या मुझे clone()
का उपयोग करना चाहिए या मूल सूची में पुन: उपयोग करना चाहिए और तत्वों को नई सरणी सूची में कॉपी करना चाहिए, जो तेज़ है?ArrayList उथले प्रतिलिपि या क्लोन()
उत्तर
उपयोग clone()
, या कॉपी-निर्माता का उपयोग करें।
कॉपी-कन्स्ट्रक्टर पास किए गए संग्रह से सरणी में अतिरिक्त परिवर्तन करता है, जबकि clone()
विधि सीधे आंतरिक सरणी का उपयोग करती है।
ध्यान रखें कि clone()
Object
देता है, इसलिए आपको List
पर जाना होगा।
बिल्कुल मैंने java.util.ArrayList स्रोत कोड को देखा और पाया कि क्लोन() Array.copyof का उपयोग करता है, जो मूल पर लूपिंग से कहीं अधिक कुशल होगा सारणी सूची। सार्वजनिक वस्तु क्लोन() { कोशिश { @SuppressWarnings ("अनियंत्रित") ArrayList
मैं दक्षता के बारे में ज्यादा चिंता नहीं करता। क्लोन का उपयोग करना() एक दर्द है; सुझाए गए रूपांतरण कन्स्ट्रक्टर का उपयोग करें। –
@ केविन बॉरिलियन आपको लगता है कि 'क्लोन()' का उपयोग दर्द क्यों है? 'क्लोन()' को लागू करना दर्द है, इसका उपयोग नहीं कर रहा है। – Bozho
कोई ज़रूरत नहीं दोहराना चाहते:
List original = ...
List shallowCopy = new ArrayList(original);
http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html#ArrayList%28java.util.Collection%29
मैन्युअल रूप से पुन: प्रयास करने के बजाय आप copy constructor का उपयोग कर सकते हैं।
कि के बीच गति अंतर के लिए और का उपयोग कर clone()
के रूप में:
- यह कोई फर्क नहीं पड़ता
- सबसे अधिक संभावना से कोई भी
- है अपने विशिष्ट सिस्टम विन्यास के लिए एक बेंचमार्क करो और मामले का उपयोग
@ माइकल..धन्यवाद। मैंने कॉपी कन्स्ट्रक्टर के लिए कोड की जांच की। Bozho के रूप में उल्लिखित आंतरिक सरणी संरचना की प्रतिलिपि बनाने के लिए इसमें अतिरिक्त कदम है। सार्वजनिक ऐरेलिस्ट (संग्रह extends E> सी) { elementData = c.toArray(); आकार = elementData.length; यदि (elementData.getClass()! = ऑब्जेक्ट [] वर्ग) elementData = Arrays.copyOf (elementData, आकार, ऑब्जेक्ट [] वर्ग); } – tech20nn
मुझे सार्वभौमिक पसंद है "क्या मुझे अनुकूलित करना चाहिए?" विचार पैटर्न –
सवाल यह बताता है कि उथल-पुथल गहराई नहीं है। एक सरणी सूची संदर्भ से सीधे संदर्भ का पालन करना भी सही काम करेगा। प्रतिलिपि प्रतिलिपि में प्रति व्यक्ति शामिल है सरणी सूची में तत्व।
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(3);
ArrayList<Integer> list1=list; //shallow copy...
क्या इसमें कोई समस्या है ??
यह गलत है। यह सब यह होगा कि स्मृति में एक भौतिक 'ArrayList' ऑब्जेक्ट के लिए दो पॉइंटर्स होंगे। एक सूची में 'इंटीजर' जोड़ना' इंटीगर 'को अन्य सूची में भी प्रकट करता है। यही वह नहीं है जिसे हम चाहते हैं। शालो कॉपी अंतर्निहित वस्तुओं को समान स्मृति स्थान साझा करने के लिए बनाता है, लेकिन सूचियों में अलग मेमोरी स्पेस होती है। तो यदि आप एक 'इंटीगर' को संशोधित करते हैं, तो यह दोनों सूचियों में संशोधित किया जाएगा। लेकिन यदि आप एक सूची में 'इंटेगर' जोड़ते हैं, तो यह दूसरे में दिखाई नहीं देगा। दीप प्रति अन्य सूची में किसी भी चीज़ में किसी भी बदलाव को प्रतिबिंबित नहीं करेगा। – Antimonit
- 1. डुप्लिकेट, क्लोन या प्रतिलिपि UIView
- 2. उथले क्लोन की सीमाएं क्या हैं
- 3. क्या स्केल AnyRef.clone एक उथले या गहरी प्रतिलिपि करता है?
- 4. क्या सरणी पर क्लोन विधि गहरी या उथली प्रतिलिपि है?
- 5. आप इस उथले प्रतिलिपि कक्षा में कैसे सुधार करेंगे?
- 6. java.util.Date क्लोन या प्रतिलिपि आंतरिक संदर्भ का पर्दाफाश करने के लिए प्रतिलिपि
- 7. LinkedHashSet या ArrayList
- 8. क्लोन या कॉपी UIViewController या UIView
- 9. जावा: सुरक्षित रूप से एक ArrayList के क्लोन टाइपकास्ट?
- 10. समय त्रुटि क्लोनिंग Git "उथले" भंडार
- 11. क्या मुझे सूची या ArrayList
- 12. .Net MemberwiseClone बनाम जावा क्लोन
- 13. VB.NET ArrayList सूची (टी) टाइप की गई प्रतिलिपि/रूपांतरण
- 14. ArrayList
- 15. ArrayList पैरामीटर
- 16. ArrayList
- 17. ArrayList
- 18. ArrayList
- 19. वैक्टर इतने उथले क्यों हैं?
- 20. सी # क्लोन एक स्टैक
- 21. ArrayList
- 22. ArrayList
- 23. जावा में ArrayList या सूची घोषणा
- 24. क्या SqlCommand.Clone() एक गहरी प्रतिलिपि या उथली प्रतिलिपि बनाता है?
- 25. जावा ArrayList
- 26. ऑब्जेक्ट की विधि की प्रतिलिपि प्रतिलिपि - प्रतिलिपि कौन करता है?
- 27. छवि क्लोन कैसे करें?
- 28. ArrayList प्रश्न
- 29. ArrayList <String> CharSequence []
- 30. एट्री क्लोन नोड
प्रश्न दर्ज करने के दौरान, आपको देखा जाना चाहिए कि संबंधित प्रश्न की एक सूची पॉप अप हो गई है (वही सूची जैसा कि आप इस पृष्ठ के दाएं निचले कॉलम में देखते हैं)। क्या आप उनमें चारों ओर झुकते थे? उन उत्तरों को पर्याप्त क्यों नहीं थे? कृपया विस्तार से बताएं। – BalusC
मैं पॉप अप पर गया था। ArrayList iterator बनाम क्लोन() के संदर्भ में प्रदर्शन से संबंधित कुछ भी नहीं था। – tech20nn