निम्नलिखित कोड पर:java.lang.IndexOutOfBoundsException: स्रोत गंतव्य में फिट नहीं करता है
static void findSubsets (ArrayList<Integer> numbers, int amount, int index)
{
ArrayList <Integer> numbersCopy = new ArrayList<Integer>(numbers.size());
Collections.copy(numbersCopy, numbers);
}
मैं त्रुटि हो रही है:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
at java.util.Collections.copy(Collections.java:548)
at backtracking2.Main.findSubsets(Main.java:61)
क्यों?
मैंने प्रतिलिपि बनाई है, क्योंकि इसे कन्स्ट्रक्टर में जोड़ना एक [बी] उथला [/ b] प्रतिलिपि करेगा और एक गहरी प्रति के समान नहीं होगा। मूल सूची में तत्वों को जोड़ना, उन्हें 'प्रतिलिपि' सूची में भी बदल देगा – Boy
@ बॉय आपका बिंदु गलत है। [ArrayList के लिए स्रोत कोड] देखें (http://hg.openjdk.java.net/jdk7/modules/jdk/file/a37326fa7f95/src/share/classes/java/util/ArrayList.java#l150) जहां एक गहरा सूची _ की प्रतिलिपि 'toArray' और ['Arrays.copyOf'] पर कॉल के माध्यम से की जाती है (https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOf (यू [],% 20int,% 20java.lang.Class))। 'NumbersCopy = new ArrayList (संख्याएं) के बाद किसी भी सूची में किए गए परिवर्तन _not_ को दूसरे को प्रभावित नहीं करते हैं। यह निश्चित रूप से कन्स्ट्रक्टर के उद्देश्य को हरा देगा (और यह 'संग्रह' लेता है और वैसे भी 'सूची' नहीं)। –
pickypg
@ बॉय जब तक आप इस तथ्य पर नहीं पहुंच रहे हैं कि _elements yourself_ को भी एक वास्तविक गहरी प्रतिलिपि के लिए पुनर्निर्मित नहीं किया गया है? चूंकि जावा को कॉपी कन्स्ट्रक्टर की आवश्यकता नहीं होती है, इसलिए यह लगभग असंभव आवश्यकता होगी और एक ['संग्रह। कॉपी 'या तो प्रदर्शन नहीं करता है] (http://hg.openjdk.java.net/jdk7/modules/jdk/file/ a37326fa7f95/src/शेयर/वर्गों/जावा/util/Collections.java # l545)। – pickypg