मेरे पास जावा में इंटेगर की एक सरणी है, मैं इसका केवल एक हिस्सा उपयोग करना चाहूंगा। मुझे पता है कि पायथन में आप इस एरे [इंडेक्स:] की तरह कुछ कर सकते हैं और यह इंडेक्स से एरे लौटाता है। क्या जावा में ऐसा कुछ संभव है।
मेरे पास जावा में इंटेगर की एक सरणी है, मैं इसका केवल एक हिस्सा उपयोग करना चाहूंगा। मुझे पता है कि पायथन में आप इस एरे [इंडेक्स:] की तरह कुछ कर सकते हैं और यह इंडेक्स से एरे लौटाता है। क्या जावा में ऐसा कुछ संभव है।
जवाबों:
जावा में एक सरणी की लंबाई अपरिवर्तनीय है। तो, आपको एक नए सरणी के रूप में वांछित भाग की प्रतिलिपि बनाने की आवश्यकता है। Java.util.Arrays वर्ग से विधि का
उपयोग करें :copyOfRange
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndex , कॉपी की जाने वाली समावेशी श्रेणी का प्रारंभिक सूचकांक है।
EndIndex , कॉपी की जाने वाली विशेष की सीमा का अंतिम सूचकांक है। (यह सूचकांक सरणी के बाहर झूठ हो सकता है)
उदाहरण के लिए:
//index 0 1 2 3 4
int[] arr = {10, 20, 30, 40, 50};
Arrays.copyOfRange(arr, 0, 2); // returns {10, 20}
Arrays.copyOfRange(arr, 1, 4); // returns {20, 30, 40}
Arrays.copyOfRange(arr, 2, arr.length); // returns {30, 40, 50} (length = 5)
endIndex
पहले तर्क के रूप में पारित सरणी के आकार से बड़ा प्रदान नहीं कर सकते । इसलिए, यदि आप एक पूर्ण प्रति चाहते हैं, तो इस सरणी का संदर्भ देते हुए एक वैरिएबल बनाएं और Arrays.copyOfRange(var, 0, var.length)
Arrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException
।
आप अपने सरणी को एक सूची के रूप में लपेट सकते हैं, और इसके अधीन सूची का अनुरोध कर सकते हैं।
MyClass[] array = ...;
List<MyClass> subArray = Arrays.asList(array).subList(index, array.length);
हां, आप Arrays.copyOfRange का उपयोग कर सकते हैं
यह एक ही चीज़ के बारे में करता है (ध्यान दें कि एक प्रति है: आप प्रारंभिक सरणी नहीं बदलते हैं)।
List
और एक का उपयोग करना होगा subList
।
तुम कोशिश कर सकते हो:
System.arraycopy(sourceArray, 0, targetArray, 0, targetArray.length);// copies whole array
// copies elements 1 and 2 from sourceArray to targetArray
System.arraycopy(sourceArray, 1, targetArray, 0, 2);
सिस्टम के लिए javadoc देखें ।
यदि आप जावा 1.6 या अधिक का उपयोग कर रहे हैं, तो आप Arrays.copyOfRange
सरणी के एक हिस्से को कॉपी करने के लिए उपयोग कर सकते हैं । जावदोक से:
निर्दिष्ट सरणी की निर्दिष्ट सीमा को नए सरणी में कॉपी करता है। रेंज का प्रारंभिक सूचकांक (से) शून्य और
original.length
, समावेशी के बीच होना चाहिए । मानoriginal[from]
को प्रतिलिपि के प्रारंभिक तत्व (जब तकfrom == original.length
या नहींfrom == to
) में रखा गया है । मूल सरणी में बाद के तत्वों से मान कॉपी में बाद के तत्वों में रखा जाता है। रेंज का अंतिम इंडेक्स (to
), जो कि इससे अधिक या उसके बराबर होना चाहिएfrom
, से अधिक हो सकता हैoriginal.length
, इस मामलेfalse
में कॉपी के सभी तत्वों में रखा गया है, जिसका इंडेक्स उससे अधिक या उसके बराबर हैoriginal.length - from
। लौटे सरणी की लंबाई होगीto - from
।
यहाँ एक सरल उदाहरण है :
/**
* @Program that Copies the specified range of the specified array into a new
* array.
* CopyofRange8Array.java
* Author:-RoseIndia Team
* Date:-15-May-2008
*/
import java.util.*;
public class CopyofRange8Array {
public static void main(String[] args) {
//creating a short array
Object T[]={"Rose","India","Net","Limited","Rohini"};
// //Copies the specified short array upto specified range,
Object T1[] = Arrays.copyOfRange(T, 1,5);
for (int i = 0; i < T1.length; i++)
//Displaying the Copied short array upto specified range
System.out.println(T1[i]);
}
}
बाहर की जाँच करें copyOfRange ; और उदाहरण:
int[] arr2 = Arrays.copyOfRange(arr,0,3);
आप कुछ इस तरह का उपयोग कर सकते हैं: Arrays#copyOfRange
आप subList(int fromIndex, int toIndex)
अपने पूर्णांकों को गिरफ्तार करने की विधि का उपयोग कर सकते हैं , कुछ इस तरह से:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> arr = new ArrayList<>();
arr.add(1);
arr.add(2);
arr.add(3);
arr.add(4);
List<Integer> partialArr = arr.subList(1, 3);
// print the subArr
for (Integer i: partialArr)
System.out.println(i + " ");
}
}
आउटपुट हो जाएगा: 2 3
।
ध्यान दें कि subList(int fromIndex, int toIndex)
विधि 2 चर पर शून्य से 1 प्राप्त करती है (var2 - 1), मुझे ठीक से पता नहीं क्यों, लेकिन ऐसा होता है, शायद सरणी के आकार को पार करने की संभावना को कम करने के लिए।
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)
255 के बजाय मैं Integer.MAX_VALUE का उपयोग नहीं कर सकता, अगर मैं वास्तविक लंबाई प्राप्त नहीं करना चाहता हूं