CodeGym /Java Blog /এলোমেলো /জাভাতে একটি অ্যারে বিপরীত করুন
John Squirrels
লেভেল 41
San Francisco

জাভাতে একটি অ্যারে বিপরীত করুন

এলোমেলো দলে প্রকাশিত
অ্যারেগুলি প্রায়শই কোডিংয়ে ব্যবহৃত হয় এবং এটি একটি ভেরিয়েবলে একই ধরণের একাধিক মান সংরক্ষণ করার একটি উপায়। একটি কোডার একটি অ্যারে বিপরীত করতে চাইতে পারে কেন অনেক কারণ থাকতে পারে. একটি অ্যারে বিপরীত করার প্রয়োজন হতে পারে, উদাহরণস্বরূপ, যখন একটি সমস্যার যুক্তি শেষ উপাদান দিয়ে শুরু করতে হবে। এই ক্ষেত্রে, সর্বোত্তম অনুশীলন হ'ল বিপরীতটি করা এবং তারপর কোডে যেখানে প্রয়োজন সেখানে বিপরীত অ্যারে ব্যবহার করা। আরও, জাভা জুনিয়রদের সাক্ষাত্কারে একটি অ্যারে বিপরীত করা একটি খুব জনপ্রিয় কাজ।

কিভাবে একটি অ্যারে বিপরীত

একটি অ্যারেকে বিপরীত করার অনেক উপায় রয়েছে এবং এখানে আমরা 5 বিবেচনা করি। বিকল্প 1-এর জন্য, একটি অ্যারেকে মূল অ্যারের শেষ (অবরোহণ) থেকে আরোহী ক্রমে ভরা একটি অতিরিক্ত অ্যারে ব্যবহার করে বিপরীত করা হয়, বিকল্প 2-এ একটি ইন-প্লেস রিভার্সাল। যেখানে শুরু এবং শেষে অ্যারের উপাদানগুলিকে অদলবদল করা হয় সেখানে করা হয়, বিকল্প 3-এ, সংগ্রহ ফ্রেমওয়ার্ক থেকে বিপরীত() পদ্ধতিটি বিকল্প 4, List.add() এবং List.remove() তে রিভার্সাল করতে ব্যবহৃত হয়। ব্যবহার করা হয়, এবং অবশেষে, বিকল্প 5-এ, পুনরাবৃত্তি ব্যবহার করা হয়।জাভাতে একটি অ্যারে বিপরীত করুন - 1

বিকল্প 1: একটি অতিরিক্ত অ্যারে ব্যবহার করে একটি অ্যারে বিপরীত করা

আসুন একটি অতিরিক্ত অ্যারে ব্যবহার করে একটি অ্যারেকে বিপরীত করার জন্য একটি সহজ পদ্ধতি লিখি । এই বিকল্পটি একটি অতিরিক্ত অ্যারে ব্যবহার করে যা মূল অ্যারের শেষ উপাদান দিয়ে শুরু করে অবতরণ ক্রমে পূর্ণ হয়, অর্থাৎ প্রথম উপাদানটি মূল অ্যারের শেষ উপাদানটির মতো, দ্বিতীয়টি শেষ থেকে দ্বিতীয়টির মতো এবং তাই যতক্ষণ না অতিরিক্ত অ্যারে পূর্ণ হয়।

import java.util.Arrays;

public class ReverseArrayDemo {

   public static void main(String[] args) {
       int[] array = {7, 8, 9, 10, 11};
       System.out.println("Array : " + Arrays.toString(array)); // print array

       // Call function to get reversed array
       int[] reversedArray = reverse(array);
       System.out.println("Reversed array : " + Arrays.toString(reversedArray)); // print reversed array
   }

   // Method returns a new reversed array, based on the array which was passed to it.
   static int[] reverse(int[] array) {
       int[] newArray = new int[array.length];

       for (int i = 0; i < array.length; i++) {
           newArray[array.length - 1 - i] = array[i];
       }

       return newArray;
   }
}
এই উদাহরণে, আমরা একটি পদ্ধতি লিখেছি যা একটি অ্যারেকে বিপরীত করে এবং একটি নতুন বিপরীত অ্যারে প্রদান করে, এটিতে পাস করা অ্যারের উপর ভিত্তি করে। অ্যারে প্রধান ঘোষণা করা হয় এবং তারপর একটি পদ্ধতি, বিপরীত , বলা হয়। পদ্ধতির আর্গুমেন্ট হল অ্যারে। পদ্ধতি বিপরীতে , একটি নতুন অ্যারে, newArray , তৈরি করা হয় এবং অ্যারের মতো একই আকার , শুধুমাত্র সম্পূর্ণ খালি। A for loop newArray পূরণ করতে ব্যবহৃত হয় এবং অ্যারের পুরো দৈর্ঘ্য জুড়ে কাজ করে। এটি একটি অ্যারের প্রথম উপাদান দিয়ে শুরু করে এবং এটিকে নতুন অ্যারের শেষ উপাদানটিতে বরাদ্দ করে করা হয়, তারপরে আমাদের অ্যারের দ্বিতীয় উপাদানটি নিয়ে এটিকে newArray- এর দ্বিতীয় শেষ উপাদানে বরাদ্দ করা এবং আরও অনেক কিছু; newArray পিছনে ভরা হয়. যখন for loop সম্পূর্ণ হয়, newArray সম্পূর্ণরূপে পূর্ণ হয় এবং এটি অ্যারের একটি সঠিক বিপরীত
অ্যারে: [7, 8, 9, 10, 11] বিপরীত অ্যারে: [11, 10, 9, 8, 7]

বিকল্প 2: বিপরীত ক্রমে একটি অ্যারের উপাদানগুলি মুদ্রণ করুন

একটি অ্যারে বিপরীত করার জন্য এই বিকল্পের জন্য, একটি অতিরিক্ত অ্যারে ব্যবহার করার প্রয়োজন নেই, এবং এটি একটি অ্যারে তালিকায় রূপান্তরিত হয় না। পরিবর্তে অ্যারের উপাদানগুলিকে বিপরীত ক্রমে রাখা হয় । এর মানে হল যে তারা আসলে, অদলবদল করা হয়েছে। প্রথম উপাদানটি শেষ উপাদানটির সাথে অদলবদল করা হয়, দ্বিতীয় উপাদানটি শেষ থেকে দ্বিতীয়টির সাথে অদলবদল করা হয় এবং আরও অনেক কিছু। লুপের জন্য A ব্যবহার করা হয় এবং এটি সম্পূর্ণ হয়ে গেলে, অ্যারেটি বিপরীত হয়ে যাবে। কোড এই মত দেখায়:

import java.util.Arrays;
/*
reversing an array in-place
*/
public class ReverseArrayDemo {

   public static void main(String[] args) {
       int[] array = {1, 4, 9, 16, 25};
       System.out.println("Array before reverse : " + Arrays.toString(array));

       arrayReverse(array);
       System.out.println("Array after reverse : " + Arrays.toString(array));
   }
//arrayReverse is a method that reverses array in-place
   static void arrayReverse(int[] array) {
       for (int i = 0; i < array.length / 2; i++) {
           int temp = array[i];
           array[i] = array[array.length - i - 1];
           array[array.length - i - 1] = temp;
       }
   }
}
মূল অ্যারেটি Arrays.toString(array) ব্যবহার করে একটি স্ট্রিং হিসাবে প্রিন্ট করা হয় এবং তারপরে আমাদের অ্যারেটি বিপরীতে একটি আর্গুমেন্ট হিসাবে পাস করা হয় । ফর লুপে বিপরীত পদ্ধতিতে , একটি পরিবর্তনশীল, temp, তৈরি এবং ব্যবহার করা হয় ফর লুপে বিপরীত ক্রম তিনটি ধাপে অর্জন করা হয় :
  1. temp এ প্রথম উপাদান বরাদ্দ করা
  2. প্রথম উপাদানে শেষ উপাদান বরাদ্দ করা
  3. শেষ উপাদানে তাপমাত্রা নির্ধারণ করা
এটি তারপর দ্বিতীয় উপাদান এবং শেষ উপাদান থেকে দ্বিতীয় জন্য এই সময় আবার বাহিত হয়, এবং তাই. এটি অ্যারের ধারাবাহিক উপাদানগুলির জন্য করা হয় তবে লুপটি কেবলমাত্র অ্যারের আকারের অর্ধেক পর্যন্ত পুনরাবৃত্তি করে। মূলত অ্যারের বিপরীত প্রান্তে থাকা উপাদানগুলি অদলবদল করা হয়। এই পদ্ধতিটি 0 থেকে সাইজে যাওয়ার জন্য লুপ ব্যবহার করে একটি পদ্ধতির চেয়ে দ্বিগুণ দ্রুত চলবে । ফলস্বরূপ অ্যারের বিপরীত ক্রম অর্জন করা হয় এবং আমাদের দেখানো হয় কিভাবে বিপরীত ক্রমে একটি অ্যারে প্রিন্ট করতে হয় এবং মানগুলি প্রিন্ট করা হয়:
বিপরীতের আগে অ্যারে: [1, 4, 9, 16, 25] বিপরীতের পরে অ্যারে: [25, 16, 9, 4, 1]

বিকল্প 3: Collections.reverse() ব্যবহার করা

জাভাতে, বিপরীত পদ্ধতি, যা বিদ্যমান সংগ্রহ কাঠামোর অংশ, একটি অ্যারে বিপরীত করতে ব্যবহার করা যেতে পারে। এর বিপরীত করতে এটি ব্যবহার করা যাক.

import java.util.Arrays;
import java.util.Collections;

public class ReverseArrayDemo {

   public static void main(String[] args) {
       Integer[] array = {1, 4, 9, 16, 25};
       System.out.println("Array before reverse : " + Arrays.toString(array));

       reverse(array);
       System.out.println("Array after reverse : " + Arrays.toString(array));
   }
//method that reverses an array
   static void reverse(Integer[] array) {
       Collections.reverse(Arrays.asList(array));
   }
}
প্রধানভাবে , অ্যারেটি 5টি সংখ্যা সহ একটি পূর্ণসংখ্যা অ্যারে হিসাবে তৈরি এবং পূর্ণ করা হয় তারপরে এটি Arrays.asList(array) ব্যবহার করে একটি তালিকা হিসাবে প্রিন্ট করা হয় এবং তারপর ফাংশন, বিপরীত , বলা হয় এবং এই ফাংশনে একটি আর্গুমেন্ট হিসাবে অ্যারে পাস করা হয়। বিপরীতে , Collections.reverse ব্যবহার করা হয়, এবং এটি অ্যারে তালিকায় ব্যবহার করা হয়, Arrays.asList (array) , বরং অ্যারে নিজেই। তারপর পরবর্তী ধাপে আমরা দেখানো হয়েছে কিভাবে System.out.println ব্যবহার করে বিপরীত ক্রমে একটি অ্যারে প্রিন্ট করা যায় এবং এই সময় প্রতিটি উপাদান একই লাইনে প্রিন্ট করা হয়:
বিপরীতের আগে অ্যারে: [1, 4, 9, 16, 25] বিপরীতের পরে অ্যারে: [25, 16, 9, 4, 1]

বিকল্প 4: List.add() এবং List.remove() ব্যবহার করে একটি অ্যারে বিপরীত

এই নতুন অপশনে, List.add() এবং List.remove() রিভার্সাল করার জন্য ব্যবহার করা হয়। এটি যেভাবে কাজ করে তা হল যে অ্যারেটি একটি তালিকায় রূপান্তরিত হয় এবং তালিকার শেষ উপাদানটি সরিয়ে তালিকার শুরুতে রাখা হয়। পুরো তালিকাটি পুনরাবৃত্তি করার পরে, নতুন তালিকাটি আসলটির বিপরীত। main() পদ্ধতিতে , 5টি সংখ্যা নিয়ে একটি অ্যারে তৈরি করা হয়। তারপর অ্যারের আসল অবস্থা কনসোলে আউটপুট করা হয়। এই অ্যারেটিকে তারপর পদ্ধতিতে একটি আর্গুমেন্ট হিসাবে রাখা হয়, reverse() । এই পদ্ধতিটি মূলত শেষ উপাদানটিকে সরিয়ে অ্যারের সামনের অংশে সন্নিবেশ করে কাজ করে। অবশেষে, অ্যারের নতুন (বিপরীত) অবস্থা কনসোলে আউটপুট করা হয়। বিপরীতে ()পদ্ধতিতে, অ্যারেটিকে একটি তালিকাতে Arrays.asList(array) এর মাধ্যমে লেখা হয় , যাতে অ্যাড() এবং রিমুভ() পদ্ধতিগুলিকে রিভার্সাল করতে সক্ষম করে। এই পদ্ধতিটি মূলত শেষ উপাদানটিকে সরিয়ে অ্যারের সামনের অংশে সন্নিবেশ করে কাজ করে। পদক্ষেপগুলি বিপরীত() ব্যবহারগুলি নিম্নরূপ। এটি তালিকার উপাদানগুলির বিপরীতমুখী করার জন্য একটি লুপ ব্যবহার করে। এটি একটি ভেরিয়েবল i আরম্ভ করে এটি করে । প্রাথমিকভাবে i 0 তে সেট করা হয়। যখন i = 0 , তালিকার list.size() - 1 এ উপাদানটি সরানো হয় এবং i < list.size() - 1 থেকে এটি সর্বদা শেষ উপাদান হবে. যেহেতু রিমুভ() মেথডটি অপসারণ করা উপাদানটি ফিরিয়ে দেয়, তাই এই উপাদানটি এখন সূচী i = 0 এ তালিকায় যোগ করা হয়েছে , অর্থাৎ শুরুতে সন্নিবেশ করা হয়েছে। তালিকার বাকি অংশটি তারপর ডানদিকে স্থানান্তরিত হয় তবে নতুন তালিকায় এখনও একই সংখ্যক উপাদান রয়েছে, যেমন আকারi , i = 1 এর পরবর্তী মানের সাথে for loop- এর সঞ্চালন অব্যাহত রেখে , একই ধাপের সেটটি সঞ্চালিত হয় যাতে শেষ উপাদানটি সরিয়ে i = 1 এ সংখ্যায় রাখা হয় এবং তালিকাটি ডানদিকে স্থানান্তরিত হয়। i এর শেষ বর্ধিত মান এবং তালিকার সমস্ত উপাদান পরিবর্তিত না হওয়া পর্যন্ত এটি চলতে থাকে। জন্য দ্বিতীয়সূচী i সহ তালিকার লুপ উপাদানটি সূচী i সহ অ্যারে উপাদানে সেট করা হয়েছে যেখানে i 0 থেকে list.size() - 1 । সংক্ষেপে, ব্যবহৃত পদক্ষেপগুলি হল: পদক্ষেপ:
  1. i = 0
  2. list.size() - 1 এ উপাদান সরিয়ে ফেলুন
  3. উপাদান সন্নিবেশ করুন, যা list.size() - 1 এ ছিল , i = 0 এ
  4. বৃদ্ধি i
  5. i এর শেষ বর্ধিত মান ব্যবহার না হওয়া পর্যন্ত 2 থেকে 4 ধাপের পুনরাবৃত্তি করুন (3 ধাপে i এর জন্য নতুন মান সহ)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ReverseArrayDemo {

   public static void main(String[] args) {
       Integer[] array = new Integer[]{1, 4, 9, 16, 25};
       System.out.println("Array before reverse : " + Arrays.toString(array));

       reverse(array);
       System.out.println("Array after reverse : " + Arrays.toString(array));
   }

   static void reverse(Integer[] array) {
       List list = new ArrayList<>(Arrays.asList(array));

       for (int i = 0; i < list.size() - 1; i++) {
           list.add(i, list.remove(list.size() - 1));
       }

       for (int i = 0; i < list.size(); i++) {
           array[i] = list.get(i);
       }
   }
}
এই কোডটি আউটপুট দেয়:
বিপরীতের আগে অ্যারে: [1, 4, 9, 16, 25] বিপরীতের পরে অ্যারে: [25, 16, 9, 4, 1]

বিকল্প 5: পুনরাবৃত্তি দ্বারা একটি অ্যারে বিপরীত করুন

পুনরাবৃত্তির পদ্ধতিটি কোডিং-এ ব্যাপকভাবে ব্যবহৃত হয় এবং কীভাবে একটি অ্যারেকে রিভার্স করতে হয় তার একটি দক্ষ পদ্ধতি তৈরি করতে ব্যবহার করা যেতে পারে। এই বিকল্পে, অ্যারেটিকে একটি তালিকায় রূপান্তরিত করা হয় এবং তারপর কোডটি প্রতিবার তালিকার শেষে শেষ উপাদানটি সরানোর সময় রিভার্স() পদ্ধতিতে চলে যায় এবং তালিকাটিতে উল্টো ক্রমে এটিতে অপসারিত মান যুক্ত করা হয়। আগের পদ্ধতির মতো, 5টি সংখ্যা নিয়ে একটি অ্যারে তৈরি করা হয়েছে। তারপরে এটি ফাংশনে একটি যুক্তি হিসাবে পাস করা হয়, বিপরীত() । বিপরীতে () প্রথম কাজটি করা হয় অ্যারেটিকে একটি তালিকায় পরিণত করা এবং তালিকার আকার পরীক্ষা করা। যদি এটিতে শুধুমাত্র একটি উপাদান থাকে বা শূন্য থাকে তবে পদ্ধতিটি শেষ হয় এবং ফিরে আসে। যদি না হয়, প্রথম উপাদানটি সরানো হয়, কিন্তু একটি পূর্ণসংখ্যাতে অনুলিপি করা হয়, মান । মেথড রিভার্স() তারপর আবার বলা হয় এবং রিকারশন আবার শুরু হয়। যখন ফাংশনটি প্রবেশ করানো হয়, তখন একই পদক্ষেপগুলি চালানো হয়, একটি আকার পরীক্ষা করা হয় যেখানে, তালিকাটি 1-এর বেশি হলে পরবর্তী পদক্ষেপটি হবে প্রথম উপাদানটি সরিয়ে ফেলা এবং তারপরে আবার পুনরাবৃত্তি করা। যখন তালিকার আকার 1 হয়, তখন বিপরীত() যেখান থেকে কল করা হয়েছে সেখানে ফিরে আসে এবং তারপরে তালিকাটিতে প্রতিটি মান যোগ করা হয় যাতে এটি মূল তালিকার বিপরীতে তৈরি হয়।

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ReverseArrayDemo {

   public static void main(String[] args) {
       Integer[] array = new Integer[]{1, 4, 9, 16, 25};
       System.out.println("Array before reverse : " + Arrays.toString(array));

       List list = new ArrayList<>(Arrays.asList(array));
       reverse(list);
       System.out.println("Array after reverse : " + Arrays.toString(list.toArray()));
   }

   public static void reverse(List list) {
       if (list== null || list.size() <= 1) {
           return;
       }

       Integer value = list.remove(0);

       reverse(list);

       list.add(value);
   }
}
আউটপুট হল:
বিপরীতের আগে অ্যারে: [1, 4, 9, 16, 25] বিপরীতের পরে অ্যারে: [25, 16, 9, 4, 1]

উপসংহার

তাই এখানে আমরা একটি অ্যারেকে বিপরীত করার 5টি ভিন্ন উপায় দেখেছি। অপশন 3, যা কালেকশন ফ্রেমওয়ার্ক ব্যবহার করে, সম্ভবত ব্যবহার করার জন্য সবচেয়ে ভালো পদ্ধতি যেহেতু Collections.reverse একটি ইতিমধ্যেই বিদ্যমান, চেষ্টা করা এবং পরীক্ষিত জাভা ফাংশন। অবশ্যই অন্যান্য বিকল্পগুলি ব্যবহার করা যেতে পারে, বিশেষ করে শেখার সময়, তবে সাধারণত মানক পদ্ধতিগুলি, যদি সেগুলি বিদ্যমান থাকে তবে সর্বোত্তম কারণ সেগুলি সাধারণত অত্যন্ত অপ্টিমাইজ করা হয় এবং পরীক্ষিত হয়৷ যাইহোক, আপনি নিজেই এই ধরনের পদ্ধতি তৈরি করতে পারেন কারণ এটি একটি ভাল কোডিং ব্যায়াম এবং আপনাকে জাভা জুনিয়রের জন্য আপনার ইন্টারভিউতে সফল হতে সাহায্য করবে।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION