জাভাতে কোন অ্যারের অংশ পান?


275

আমার জাভাতে পূর্ণসংখ্যার একটি অ্যারে রয়েছে, আমি এর একটি অংশই ব্যবহার করতে চাই। পাইথনে আমি জানি আপনি এই অ্যারের মতো কিছু করতে পারেন [সূচক:] এবং এটি সূচী থেকে অ্যারেটি ফিরিয়ে দেয়। জাভাতে কি এমন কিছু সম্ভব।

উত্তর:


444

জাভাতে একটি অ্যারের দৈর্ঘ্য অপরিবর্তনীয়। সুতরাং, আপনার পছন্দসই অংশটি একটি নতুন অ্যারে হিসাবে অনুলিপি করা উচিত। Java.util.Arrays বর্গ থেকে পদ্ধতি
ব্যবহার করুন :copyOfRange

int[] newArray = Arrays.copyOfRange(oldArray, 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)

একটি আকার সীমা আছে বলে মনে হচ্ছে? শুধুমাত্র এই কাজ: Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)255 পরিবর্তে হিসাবে আমি Integer.MAX_VALUE ব্যবহার করতে পারবেন না, যদি আমি বাস্তব দৈর্ঘ্য পেতে চান
কুম্ভরাশি পাওয়ার

@ অ্যাকোরিয়াস পাওয়ারের আকারের সীমাটি অ্যারের আকার এবং এটি 255 এর চেয়ে বড় হতে পারে You endIndexপ্রথম আর্গুমেন্ট হিসাবে অ্যারের আকারের চেয়ে বড় আপনি সরবরাহ করতে পারবেন না । সুতরাং, আপনি যদি একটি সম্পূর্ণ অনুলিপি চান, এই অ্যারে উল্লেখ করে একটি ভেরিয়েবল তৈরি করুন এবং ব্যবহার করুনArrays.copyOfRange(var, 0, var.length)Arrays.copyOf(var, var.length)
ইলিয়াস

স্ট্যাকট্রেস সাব-অ্যারের জন্য আমাকে একটি স্থানীয় ভেরি তৈরি করতে হবে, তবে আমি দেখতে পেয়েছি যে এটি কাজ করে !!! Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
অ্যাকোরিয়াস পাওয়ার

সম্পর্কে সাবধান ArrayIndexOutOfBoundsException
ইলিয়াস

1
অন্য সমস্যা আছে। আমার যদি দৈর্ঘ্যের স্ট্রিং অ্যারেটি বিভক্ত করতে হয় তবে 500 কে বলুন 250 কে এর সাবারিগুলিতে। এই পদ্ধতিটি পূর্ণসংখ্যা গ্রহণ করে যা সর্বাধিক 65000 এ বের হয়
বিষ্ণু দাহাটন্ডে

31

আপনি তালিকা হিসাবে আপনার অ্যারে গুটিয়ে রাখতে পারেন, এবং এটির একটি সাবলিস্টের জন্য অনুরোধ করতে পারেন।

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

22

হ্যাঁ, আপনি অ্যারেআস.কপিঅফরেঞ্জ ব্যবহার করতে পারেন

এটি একই জিনিসটি সম্পর্কে রয়েছে (দ্রষ্টব্য একটি অনুলিপি রয়েছে: আপনি প্রাথমিক অ্যারে পরিবর্তন করেন না)।


2
এটি বলেছে, আপনি যদি একটি স্পষ্ট অনুলিপি তৈরি করতে না চান তবে আপনাকে @ কে-বালোর উত্তরে বর্ণিত একটি Listএবং একটি ব্যবহার করতে হবে subList
লুই ওয়াসারম্যান

সেটা ঠিক. জাভাতে অ্যারে স্লাইসিং সুবিধা নেই যা আরও আধুনিক ভাষাগুলি অফার করে।
সাগ্রেট

আমি নিশ্চিত না যে আমি এটি সেভাবে রেখেছি, তবে ... হ্যাঁ, জাভা অ্যারে স্লাইসিংয়ের প্রস্তাব দেয় না। (এটি বলেছে যে, এই পদ্ধতির কিছু সুবিধা রয়েছে: অতিরিক্ত ক্ষেত্রগুলি এড়াতে মেমরি ফাঁসের সম্ভাবনা হ্রাস করা, অ্যারে ওভারহেড হ্রাস করা ইত্যাদি আপনি যে কোনও পথে যেতে পারেন))
লুই ওয়াসারম্যান

হ্যাঁ, আপনি আবার ঠিক আছেন (এবং আমি শিখা যুদ্ধ শুরু করার চেষ্টা করিনি;))। স্লাইসিং জিসিকে খুব জটিল করে তোলে। এবং যখন জাভা স্ট্রিংসে অবজেক্ট ভিত্তিক অন্তর্নিহিত টুকরো টুকরো করার চেষ্টা করেছিল তা এটি আরও স্পষ্ট করে তোলে যে এটি বিপজ্জনক
অস্বীকার করেছেন সাগুরেট

11

আপনি চেষ্টা করতে পারেন:

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); 

সিস্টেমের জন্য জাভাদোক দেখুন ।


3
আমি কেবলমাত্র এটি পছন্দ করি ঠিক কীভাবে অ্যারেস.কপিঅফ () এবং অ্যারেসকপিঅফফ্রেঞ্জ () বাস্তবে বাস্তবায়িত হয় (সানসীমা চেকগুলি) এবং তবুও এটি কোনও ভোট পায় না যদিও সিস্টেম.আরেকেপি ডেটিং সত্ত্বেও কিছুটা বেশি ওভারহেড ইউটিলিটি পদ্ধতি র‌্যাপার্স ভোটগুলি র‌্যাক করে il 1995 এ ফিরে এসেছেন
ডেভ

1
আমার ধারণা এটি কারও পক্ষে কেবল "আধুনিক" যথেষ্ট দেখাচ্ছে না।
ডেভ

আমি পুরানো স্কুলে যেতে পছন্দ করি না, কোনও চকচকে ঘণ্টা এবং হুইসেল কেবল প্রয়োজনীয় যন্ত্রপাতিটিই পছন্দ করি। সি
মেম্পপির

তবে অ্যারেস.কপিঅফ্রেঞ্জ () ব্যবহারের ফলে পাঠযোগ্যতা বৃদ্ধি পায় এবং বাগগুলির সম্ভাবনা উল্লেখযোগ্যভাবে হ্রাস পায়।
ফ্লোরিয়ান এফ

7

আপনি যদি জাভা ১.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]);
    }

}

3

পরীক্ষা করে দেখুন copyOfRange ; এবং উদাহরণ:

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


-2

আপনি 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) এর উপর বিয়োগ 1 সম্পাদন করে, আমি ঠিক জানি না কেন, তবে এটি ঘটে যা সম্ভবত অ্যারের আকার অতিক্রম করার সম্ভাবনা হ্রাস করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.