यदि आपको कच्ची सरणियों के साथ काम करना चाहिए और न ही ArrayList
तब Arrays
आपकी आवश्यकता है। यदि आप स्रोत कोड को देखते हैं, तो ये एक सरणी की प्रतिलिपि प्राप्त करने के लिए सबसे अच्छे तरीके हैं। उनके पास रक्षात्मक प्रोग्रामिंग का एक अच्छा हिस्सा है क्योंकि System.arraycopy()
यदि आप इसे अतार्किक मापदंडों को खिलाते हैं तो विधि बहुत सारे अनियंत्रित अपवादों को फेंक देती है।
आप या तो उपयोग कर सकते हैं Arrays.copyOf()
जो पहले से Nth
तत्व से नए छोटे सरणी में कॉपी करेगा ।
public static <T> T[] copyOf(T[] original, int newLength)
निर्दिष्ट सरणी की प्रतिलिपि करता है, अशक्त या अशक्त (यदि आवश्यक हो) के साथ पैडिंग तो प्रतिलिपि में निर्दिष्ट लंबाई है। मूल सरणी और प्रतिलिपि दोनों में मान्य सभी सूचकांकों के लिए, दो सरणियों में समान मान होंगे। किसी भी सूचक के लिए जो कॉपी में मान्य हैं, लेकिन मूल नहीं हैं, कॉपी में शून्य होगा। इस तरह के सूचकांक मौजूद होंगे और यदि केवल निर्दिष्ट लंबाई मूल सरणी से अधिक हो। परिणामस्वरूप सरणी मूल सरणी के समान ही वर्ग है।
2770
2771 public static <T,U> T[] More ...copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
2772 T[] copy = ((Object)newType == (Object)Object[].class)
2773 ? (T[]) new Object[newLength]
2774 : (T[]) Array.newInstance(newType.getComponentType(), newLength);
2775 System.arraycopy(original, 0, copy, 0,
2776 Math.min(original.length, newLength));
2777 return copy;
2778 }
या Arrays.copyOfRange()
चाल भी करेंगे:
public static <T> T[] copyOfRange(T[] original, int from, int to)
निर्दिष्ट सरणी की निर्दिष्ट सीमा को एक नए सरणी में कॉपी करता है। रेंज का प्रारंभिक सूचकांक (से) शून्य और ओरिजिनल के बीच झूठ होना चाहिए। मूल [से] पर मूल्य को कॉपी के प्रारंभिक तत्व में रखा गया है (जब तक == मूल से। गति या == से)। मूल सरणी में बाद के तत्वों से मान कॉपी में बाद के तत्वों में रखा जाता है। रेंज का अंतिम इंडेक्स (टू), जो मूल से अधिक या उससे अधिक होना चाहिए, मूल से अधिक हो सकता है। लैंटर, जिस स्थिति में शून्य को कॉपी के सभी तत्वों में रखा जाता है जिसका इंडेक्स मूल से अधिक या उसके बराबर होता है। लंबाई - से। लौटे सरणी की लंबाई - से होगी। परिणामस्वरूप सरणी मूल सरणी के समान ही वर्ग है।
3035 public static <T,U> T[] More ...copyOfRange(U[] original, int from, int to, Class<? extends T[]> newType) {
3036 int newLength = to - from;
3037 if (newLength < 0)
3038 throw new IllegalArgumentException(from + " > " + to);
3039 T[] copy = ((Object)newType == (Object)Object[].class)
3040 ? (T[]) new Object[newLength]
3041 : (T[]) Array.newInstance(newType.getComponentType(), newLength);
3042 System.arraycopy(original, from, copy, 0,
3043 Math.min(original.length - from, newLength));
3044 return copy;
3045 }
जैसा कि आप देख सकते हैं, ये दोनों System.arraycopy
रक्षात्मक तर्क के साथ केवल आवरण कार्य हैं जो आप करने की कोशिश कर रहे हैं वह वैध है।
System.arraycopy
सरणियों की नकल करने का सबसे तेज़ तरीका है।