"ঋষি, আমি সত্যিই অ্যারে ক্লাসের বাকি পদ্ধতিগুলি সম্পর্কে শেখার জন্য উন্মুখ।

"শিক্ষার জন্য এইরকম উদ্যম আপনার পুরানো শিক্ষককে খুশি না করে পারে না! কিন্তু, আপনি যদি সত্যিই সবকিছু খুঁজে পেতে চান, তাহলে Google নামে একজন দয়ালু উইজার্ড আপনাকে দিনরাত সাহায্য করবে।"

"উহ..."

"শুধু মজা করছি। ধরনের। অবশ্যই, আমি সবকিছু ভালোভাবে ব্যাখ্যা করব, কিন্তু যদি কিছু আসে তবে - ভাল উইজার্ড মনে রাখবেন। আমি পদ্ধতিটি দিয়ে আজকের পাঠ শুরু 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()পদ্ধতিটি শুধুমাত্র এক-মাত্রিক অ্যারেগুলির সাথে কাজ করে৷ আপনি যদি পদ্ধতিতে একটি দ্বি-মাত্রিক অ্যারে পাস করেন, তাহলে এটিকে এক-মাত্রিক হিসাবে গণ্য করা হবে, সমস্ত পরবর্তী পরিণতি সহ৷

Arrays.copyOf()

"অ্যামিগো, দয়া করে আমাকে বলুন কিভাবে একটি অ্যারের আকার তৈরি করার পরে এটি পরিবর্তন করতে হয়?"

"উমম... এটা একটা ট্রিক প্রশ্ন, তাই না? আমি আর তেমন অনভিজ্ঞ নই। সঠিক উত্তর হল আপনি পারবেন না! আপনি একটি অ্যারের তৈরি হওয়ার পরে আকার পরিবর্তন করতে পারবেন না।"

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

"এটা এখনও অসম্ভব!

"আসলে, আপনি যদি সত্যিই চান, তাহলে আপনি পারেন! একটি প্রোগ্রামিং কৌশলের সাহায্যে:

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

"এই দুটি জিনিস যা পদ্ধতিটি 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]"

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]"

Arrays.sort()

"এবং পরিশেষে, আমি সবচেয়ে বেশি ছেড়ে দিয়েছি... mmm... শেষের জন্য মনোরম পদ্ধতি: সাজানো । প্রোগ্রামিং-এ অ্যারেগুলি প্রায়শই সাজানো হয়। অ্যারেগুলির সাথে কাজ করার সময় এখানে শীর্ষ 3টি জনপ্রিয় অ্যাকশন রয়েছে:

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

"ভাল-পারফর্মিং বাছাই অ্যালগরিদম, আমি অবশ্যই বলব, লেখা এত সহজ নয়। আরও স্পষ্ট করে বলতে গেলে, এটি একটি আদর্শ কাজ, এবং একজন ছাত্র হিসাবে, কখনও কখনও বাছাই করার অ্যালগরিদম লেখার অনুশীলন করা আপনার ক্ষতি করবে না। কিন্তু কর্মক্ষেত্রে, এটি চাকাটি পুনরায় উদ্ভাবন করার জন্য আপনার সময় নষ্ট না করাই ভালো। জাভা-এর নির্মাতারা 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টি উপাদানের একটি অ্যারে সাজানোর জন্য অ্যারের উপাদানগুলির প্রায় 10,000টি তুলনা জড়িত থাকবে৷ এক মিলিয়ন উপাদানের একটি অ্যারে সাজানোর জন্য প্রায় 20 মিলিয়ন তুলনা জড়িত হবে৷"

" আপনি যখন উপাদানের সংখ্যা বিবেচনা করেন তখন খুব বেশি তুলনা হয় না!"

"আমি ঠিক এটাই বলছি। QuickSort অ্যালগরিদম খুব কার্যকর।

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

"যদি কাঙ্খিত উপাদানটি অ্যারেতে একাধিকবার উপস্থিত হয় ?"

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

"যদি অ্যারেতে পছন্দসই উপাদানটি আদৌ না থাকে?"

"এই ক্ষেত্রে, অ্যালগরিদম একটি নেতিবাচক সূচক প্রদান করবে ।

ডকুমেন্টেশন

"সবকিছু পরিষ্কার, ঋষি! এটা খুবই মজার ছিল।"

"আপনি যদি সত্যিই এটিকে খুব আকর্ষণীয় মনে করেন, তাহলে আপনার অবসর সময়ে ওরাকল ওয়েবসাইটে ক্লাসের অফিসিয়াল ডকুমেন্টেশন Arraysএবং এর পদ্ধতিগুলির মাধ্যমে স্কিম করুন ।

"আপনি ঘনিষ্ঠভাবে দেখতে পারেন, উদাহরণস্বরূপ, Arrays.mismatch()এবং Arrays.compare()পদ্ধতিগুলি৷ আপনি সম্ভবত সেগুলিকে ভাল ব্যবহার করতে সক্ষম হবেন৷

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