1.Arrays.fill()

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

int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;

অথবা আপনি কেবল পদ্ধতিটিকে কল করতে পারেন Arrays.fill(), যা ঠিক একই কাজ করে: এটি পাস করা মান দিয়ে পাস করা অ্যারে পূরণ করে। এটি দেখতে কেমন তা এখানে:

Arrays.fill(name, value)

এবং উপরের উদাহরণে কোডটি আরও কিছুটা কমপ্যাক্ট এবং পরিষ্কার করা যেতে পারে:

int[] x = new int[100];
Arrays.fill(x, 999);

আপনি Arrays.fill()সম্পূর্ণ অ্যারে নয়, তবে কিছু মান সহ এর একটি অংশ পূরণ করতে পদ্ধতিটি ব্যবহার করতে পারেন:

Arrays.fill(name, first, last, value)

যেখানে প্রথম এবং শেষ প্রথম এবং শেষ ঘরগুলির সূচকগুলি পূরণ করতে হবে।

জাভা এর ভাল পুরানো ঐতিহ্য অনুসারে, মনে রাখবেন যে শেষ উপাদানটি পরিসরে অন্তর্ভুক্ত নয়।

উদাহরণ:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Arrays.fill(x, 3, 7, 999);


String str = Arrays.toString(x);


আমরা ঘরগুলি x[3], x[4], x[5], এবং x[6]মান দিয়ে পূরণ করছি 999। একটি অ্যারের ঘর শূন্য থেকে শুরু করে সংখ্যায়িত হয়!

ভেরিয়েবলের strমান রয়েছে:
"[1, 2, 3, 999, 999, 999, 999, 8, 9, 10]"

পদ্ধতিটি Arrays.fill()শুধুমাত্র এক-মাত্রিক অ্যারেগুলির সাথে কাজ করে। আপনি যদি পদ্ধতিতে একটি দ্বি-মাত্রিক অ্যারে পাস করেন, তাহলে পরবর্তী সমস্ত ফলাফল সহ এটিকে এক-মাত্রিক হিসাবে গণ্য করা হবে।



2.Arrays.copyOf()

আপনি ইতিমধ্যেই জানেন যে, আপনি একটি অ্যারের তৈরি হওয়ার পরে আকার পরিবর্তন করতে পারবেন না।

কিন্তু আপনি যদি সত্যিই চান?

ঠিক আছে, আপনি যদি সত্যিই চান, তাহলে আপনি পারেন!

  • পছন্দসই দৈর্ঘ্যের একটি নতুন অ্যারে তৈরি করুন
  • এটিতে প্রথম অ্যারে থেকে সমস্ত উপাদান কপি করুন।

যাইহোক, এই Arrays.copyOf()পদ্ধতিটি ঠিক কি করে। এটিকে কল করার মতো দেখায়:

Type[] name2 = Arrays.copyOf(name, length);

এই পদ্ধতিটি বিদ্যমান অ্যারে পরিবর্তন করে না , বরং একটি নতুন অ্যারে তৈরি করে এবং পুরানো অ্যারের উপাদানগুলিকে এতে অনুলিপি করে।

যদি উপাদানগুলি মাপসই না হয় ( দৈর্ঘ্যটি বিদ্যমান অ্যারের দৈর্ঘ্যের চেয়ে কম ), তাহলে অতিরিক্ত মানগুলি উপেক্ষা করা হয়।

যদি নতুন অ্যারের দৈর্ঘ্য পুরানোটির দৈর্ঘ্যের চেয়ে বেশি হয়, তবে ঘরগুলি শূন্য দিয়ে পূর্ণ হয়।

উদাহরণ:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int[] x2 = Arrays.copyOf(x, 5);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOf(x, 15);
String str3 = Arrays.toString(x3);


ভেরিয়েবলের str2মান রয়েছে:
"[1, 2, 3, 4, 5]"

ভেরিয়েবলের str3মান রয়েছে:
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]"

3.Arrays.copyOfRange()

এবং আপনি যদি 10 দৈর্ঘ্যের অ্যারে থেকে দৈর্ঘ্য 5 এর একটি অ্যারে পেতে চান তবে কী হবে, কিন্তু প্রথম 5টির পরিবর্তে আপনার শেষ 5টি উপাদান ধারণ করতে হবে?

এই ক্ষেত্রে, ক্লাসের আরেকটি পদ্ধতি Arraysকাজে আসবে - Arrays.copyOfRange(). আমরা যখন এটিকে কল করি তখন এটি কেমন দেখায় তা এখানে:

Type[] name2 = Arrays.copyOfRange(name, first, last);

এই পদ্ধতিটি একটি নতুন অ্যারেও তৈরি করে, কিন্তু মূল অ্যারেতে একটি নির্বিচারে জায়গা থেকে উপাদান দিয়ে এটি পূরণ করে। যেখানে প্রথম এবং শেষ প্রথম এবং শেষ উপাদানগুলির সূচকগুলি যা নতুন অ্যারেতে রাখা উচিত।

জাভা এর ভাল পুরানো ঐতিহ্য অনুসারে, মনে রাখবেন যে শেষ উপাদানটি পরিসরে অন্তর্ভুক্ত নয়।

উদাহরণ:

int[] x = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

int[] x2 = Arrays.copyOfRange(x, 5, 10);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOfRange(x, 5, 15);
String str3 = Arrays.toString(x3);


ভেরিয়েবলের str2মান রয়েছে:
"[16, 17, 18, 19, 20]"

ভেরিয়েবলের str3মান রয়েছে:
"[16, 17, 18, 19, 20, 0, 0, 0, 0, 0]"


4.Arrays.sort()

আহ, সবচেয়ে সুস্বাদু আচরণ: বাছাই . অ্যারেগুলি প্রায়শই প্রোগ্রামিংয়ে সাজানো হয়। অ্যারেগুলির সাথে কাজ করার সময় তিনটি সবচেয়ে সাধারণ ক্রিয়া হল:

  • একটি অ্যারে সাজানো
  • একটি অ্যারের সর্বনিম্ন (বা সর্বাধিক) উপাদান খুঁজে বের করা
  • একটি অ্যারের একটি উপাদানের সূচক নির্ধারণ করা (একটি অ্যারের একটি উপাদান খুঁজে পাওয়া)

ঠিক এই কারণেই জাভার নির্মাতারা sort()ক্লাসে পদ্ধতিটি অন্তর্ভুক্ত করেছেন Arrays। এটিকে কল করার মতো দেখায়:

Arrays.sort(name);

এই পদ্ধতিটি পাস করা অ্যারেকে আরোহী ক্রমে সাজায়।

উদাহরণ:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x);

String str = Arrays.toString(x);



ভেরিয়েবলের strমান রয়েছে:
"[-20, -20, -20, -2, 0, 3, 8, 11, 99, 999]"

চমৎকার, তাই না? আপনি একটি পদ্ধতি বলা, এবং এখন আপনি একটি সাজানো অ্যারে আছে. সুন্দর।

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

Arrays.sort(name, first, last);

যেখানে প্রথম এবং শেষ প্রথম এবং শেষ কক্ষের সূচকগুলি যা বাছাই করা উচিত।

জাভা এর ভাল পুরানো ঐতিহ্য অনুসারে, মনে রাখবেন যে শেষ উপাদানটি পরিসরে অন্তর্ভুক্ত নয়।

উদাহরণ:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x, 4, 8);
String str = Arrays.toString(x);


ভেরিয়েবলের strমান রয়েছে:
"[11, -2, 3, 0, -20, -20, 8, 999, 99, -20]"

অ্যারে সাজানোর জন্য, জাভা দ্রুততম সাজানোর অ্যালগরিদম ব্যবহার করে — QuickSort । এর গণনাগত জটিলতা অ্যারের আকারের উপর নির্ভর করে এবং সূত্র N log(N) ব্যবহার করে গণনা করা হয়।

1000 উপাদানের একটি অ্যারে সাজানোর জন্য অ্যারের উপাদানগুলির প্রায় 3,000 তুলনা জড়িত থাকবে। এক মিলিয়ন উপাদানের একটি বিন্যাস বাছাই প্রায় 6 মিলিয়ন তুলনা জড়িত হবে.



5.Arrays.binarySearch()

ভাল, এবং ক্লাসের সবচেয়ে আকর্ষণীয় পদ্ধতির শেষটি Arraysএকটি অ্যারেতে একটি প্রদত্ত মান অনুসন্ধান করতে সক্ষম। এটি কোন সাধারণ অনুসন্ধান নয় - এটি প্রিয় বাইনারি অনুসন্ধান । এটি এতে ফুটে ওঠে:

  • প্রথমত, অ্যারে সাজানো হয়।
  • তারপর অ্যারের মাঝের উপাদানটিকে আমরা যেটির সাথে খুঁজছি তার সাথে তুলনা করা হয়।
  • যদি উপাদানটি মধ্যম উপাদানের চেয়ে বড় হয়, তাহলে অনুসন্ধানটি অ্যারের ডান অর্ধে চলতে থাকে।
  • যদি আমরা যে উপাদানটি খুঁজছি সেটি মধ্যম উপাদানের চেয়ে কম হয়, তাহলে অনুসন্ধানটি অ্যারের বাম অর্ধেকের মধ্যে চলতে থাকে।

কারণ অ্যারেটি সাজানো হয়েছে, এটি একটি একক তুলনাতে এর অর্ধেক নির্মূল করা সম্ভব। তারপর পরবর্তী ধাপে, আমরা অন্য অর্ধেক টস আউট, এবং তাই.

এই পদ্ধতি বাইনারি অনুসন্ধান খুব দ্রুত করে তোলে। এক মিলিয়ন (!) উপাদানের একটি অ্যারেতে, এটি শুধুমাত্র 20টি তুলনাতে পছন্দসই উপাদানের সূচক খুঁজে পেতে পারে। পদ্ধতির ঘাটতি হল যে অ্যারেটি প্রথমে সাজাতে হবে, এবং বাছাই করতেও সময় লাগে।

এটিকে কল করার মতো দেখায়:

int index = Arrays.binarySearch(name, value);

কোথায় nameঅ্যারের নাম, যা পাস করা আবশ্যক ইতিমধ্যে সাজানো (উদাহরণস্বরূপ, Arrays.sort()পদ্ধতি ব্যবহার করে)। এবং valueআমরা অ্যারের জন্য অনুসন্ধান করা হয় উপাদান. পদ্ধতি দ্বারা প্রত্যাবর্তিত ফলাফল হল পছন্দসই অ্যারে উপাদানের সূচক

উদাহরণ:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};
Arrays.sort(x);

int index1 = Arrays.binarySearch(x, 0);
int index2 = Arrays.binarySearch(x, -20);
int index3 = Arrays.binarySearch(x, 99);
int index4 = Arrays.binarySearch(x, 5);
xহল:
{-20, -20, -20, -2, 0, 3, 8, 11, 99, 999}

4
1(সূচক 0এবং 2এছাড়াও গ্রহণযোগ্য)
8
-7

যদি অ্যারেটিতে উপাদানের একাধিক দৃষ্টান্ত থাকে যা অনুসন্ধান করা হচ্ছে, তবে অ্যালগরিদম কেবল তাদের একটির সূচী ফেরত দেবে (কোন গ্যারান্টি নেই যে এটি হবে, বলুন, প্রথমটি বা বিপরীতটি - এর মধ্যে একেবারে শেষ সদৃশ উপাদান)।"

যদি অ্যারেতে উপাদানটি না পাওয়া যায়, তাহলে সূচকটি নেতিবাচক হবে।



Arrays6. ক্লাসে ওরাকল ডকুমেন্টেশনের লিঙ্ক

আপনি যদি খুব আগ্রহী হন তবে আপনি Arraysক্লাস এবং এর সমস্ত পদ্ধতি সম্পর্কে অফিসিয়াল ডকুমেন্টেশনে পড়তে পারেন a href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base /java/util/Arrays.html">ওরাকল ওয়েবসাইটে।

উদাহরণস্বরূপ, আপনি Arrays.mismatch()এবং Arrays.compare()পদ্ধতি সম্পর্কে পড়তে পারেন। হয়তো আপনি তাদের কোনোভাবে দরকারী খুঁজে পাবেন.

এবং পদ্ধতির সংখ্যা দ্বারা বিভ্রান্ত হবেন না। প্রতিটি পদ্ধতির 5-10টি রূপ রয়েছে, যা শুধুমাত্র তাদের পরামিতি প্রকারের মধ্যে পৃথক।