2012-06-12 12 views
148

मेरे पास जावा में इंटीजर की एक सरणी है, मैं इसका केवल एक हिस्सा उपयोग करना चाहता हूं। मुझे पाइथन में पता है कि आप इस सरणी की तरह कुछ कर सकते हैं [अनुक्रमणिका:] और यह इंडेक्स से सरणी देता है। जावा में ऐसा कुछ संभव है।जावा में एक ऐरे का केवल एक हिस्सा मिलता है?

+0

संभावित डुप्लिकेट [हेप पर एक नई सरणी बनाये बिना जावा में किसी सरणी के एक सेगमेंट को पकड़ें] (http://stackoverflow.com/questions/1100371/grab-a-segment-of-an-array-in- जावा-बिना-निर्माण-एक-नई-सरणी-ऑन-हीप) –

उत्तर

240

उपयोग java.util.Arrays कक्षा से copyOfRange विधि:

int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex); 

STARTINDEX रेंज की प्रारंभिक अनुक्रमणिका प्रतिलिपि बनानी है समावेशी है।
एंड इंडेक्स कॉपी करने के लिए सीमा की अंतिम अनुक्रमणिका है, विशेष। (यह सूचकांक सरणी के बाहर झूठ हो सकते हैं)

उदा:

//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) 
+0

एक आकार सीमा प्रतीत होती है? केवल यह काम करता है: 'Arrays.copyOfRange (Thread.currentThread()। getStackTrace(), 1,255) '255 के बजाय मैं इंटीजर का उपयोग नहीं कर सकता।MAX_VALUE, अगर मैं वास्तविक लंबाई प्राप्त नहीं करना चाहता –

+0

@AquariusPower आकार सीमा सरणी आकार है, और यह 255 से बड़ा हो सकता है। आप केवल 'एंड इंडेक्स' को पहले के रूप में पारित सरणी के आकार से बड़ा नहीं प्रदान कर सकते तर्क। इसलिए, यदि आप एक पूर्ण प्रतिलिपि चाहते हैं, तो इस सरणी का संदर्भ देने वाला एक चर बनाएँ और 'Arrays.copyOfRange (var, 0, var.length) 'या' Arrays.copyOf (var, var.length) ' – elias

+0

का उपयोग करना होगा stacktrace उप-सरणी के लिए एक स्थानीय var बनाएँ, लेकिन मैंने पाया कि यह काम करता है !!! 'Arrays.copyOfRange (Thread.currentThread()। GetStackTrace(), 1, Short.MAX_VALUE)' –

18

हाँ, आप Arrays.copyOfRange

उपयोग कर सकते हैं यह (ध्यान दें कि वहाँ एक प्रति है एक ही बात के बारे में है: आप में परिवर्तन नहीं करते प्रारंभिक सरणी)।

+2

यह कहा गया है कि, यदि आप एक स्पष्ट प्रतिलिपि बनाना नहीं चाहते हैं, तो आपको @ के-बेलो के उत्तर में उल्लिखित 'सूची' और 'उपसूची' का उपयोग करना होगा। –

+0

यह सही है। जावा में सरणी स्लाइसिंग सुविधाएं नहीं हैं जो अधिक आधुनिक भाषाएं प्रदान करती हैं। –

+0

मुझे यकीन नहीं है कि मैं इसे इस तरह से रखूंगा, लेकिन ... हाँ, जावा सरणी स्लाइसिंग की पेशकश नहीं करता है। (उस ने कहा, इस दृष्टिकोण के कुछ फायदे हैं: मेमोरी लीक के लिए कम संभावनाएं, अतिरिक्त फ़ील्ड से बचकर कम सरणी ओवरहेड इत्यादि। आप किसी भी तरह से जा सकते हैं।) –

2

बाहर copyOfRange चेक; और उदाहरण:

int[] arr2 = Arrays.copyOfRange(arr,0,3); 
+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाले पदों/187071 9 1) –

20

आप अपनी सरणी को एक सूची के रूप में लपेट सकते हैं, और इसके एक उपन्यास का अनुरोध कर सकते हैं।

MyClass[] array = ...; 
List<MyClass> subArray = Arrays.asList(array).subList(index, array.length); 
7

आप जावा 1.6 या अधिक से अधिक उपयोग कर रहे हैं, तो आप Arrays.copyOfRange का उपयोग सरणी के एक हिस्से को कॉपी करने के लिए कर सकते हैं। जावाडोक से:

निर्दिष्ट सरणी की निर्दिष्ट सीमा को एक नई सरणी में प्रतिलिपि बनाता है। रेंज (से) की प्रारंभिक अनुक्रमणिका शून्य और original.length के बीच होनी चाहिए, समावेशी। original[from] पर मान प्रतिलिपि के प्रारंभिक तत्व में रखा गया है (जब तक from == original.length या from == to)। मूल सरणी में आने वाले तत्वों के मान प्रतिलिपि में बाद के तत्वों में रखे जाते हैं। श्रेणी की अंतिम अनुक्रमणिका (to), जो from से अधिक या बराबर होनी चाहिए, original.length से अधिक हो सकती है, जिस स्थिति में false प्रतिलिपि के सभी तत्वों में रखा गया है जिनकी अनुक्रमणिका original.length - from से अधिक या बराबर है। लौटाए गए सरणी की लंबाई to - from होगी।

यहाँ एक simple example है:

/** 
* @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]); 
    } 

} 
0

तुम कोशिश कर सकते हैं:

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 for System

संबंधित मुद्दे