2015-02-21 6 views
5

में ArrayList का उपयोग करते समय गहरी प्रतिलिपि मुझे पता है कि यह एक मामूली मामला है लेकिन मैं इस सवाल से पूछना चाहता हूं। मान लीजिए कि मेरे पास एक तरीका है जो ऑब्जेक्ट्स का ऐरेलिस्ट देता है। सबसे पहले हमें इसकी एक प्रति वापस करनी है? यदि हां, तो क्या इसे ऐरेलिस्ट की गहरी प्रतिलिपि होनी चाहिए? क्या हमें अभी भी एक गहरी प्रतिलिपि करने की आवश्यकता है जब इसके अंदर की वस्तुएं अपरिवर्तनीय हों? अगर हम निर्माताजावा

ArrayList<T> arr = new ArrayList<>(collection); 

के इस प्रकार का उपयोग तब सरणी के तत्वों कॉपी कर रहे हैं या वे अभी भी पुराने मूल्यों को इंगित? धन्यवाद

उत्तर

6

यह आपके उपयोग के मामले पर निर्भर करता है। कभी-कभी अंतर्निहित संग्रह का पर्दाफाश करना वांछनीय है, कुछ बार यह नहीं है।

यदि आप उदाहरण के लिए अपनी कक्षा के लिए संग्रह विधियों का लाभ उठाना चाहते हैं तो आप अंतर्निहित संग्रह (या अंतर्निहित संग्रह का एक संशोधित दृश्य) वापस कर सकते हैं। अंतर्निहित संग्रह मैं

return new ArrayList<>(yourCollection); 

साथ जाना होगा बेनकाब करने के लिए नहीं यह करने के लिए अपने वर्ग के ग्राहकों के लिए सक्षम बनाता है उदाहरण

phoneBook.getPeople().removeIf(Person::isAddressInvalid); 

के लिए आप करते तो चाहते हैं मुझे लगता है कि यह बहुत के लिए दुर्लभ है एक विधि में एक गहरी प्रतिलिपि वापस करें।

+0

ठीक है अगर टाइप स्ट्रिंग है तो क्या मैं इसे इस तरह वापस कर सकता हूं: नया ArrayList <> (yourCollection) लौटाएं; – user2735714

+2

बिल्कुल। स्ट्रिंग्स अपरिवर्तनीय हैं, इसलिए तारों की एक गहरी प्रतिलिपि वापस करना विशेष रूप से व्यर्थ है। – aioobe