জাভাতে ArrayList একটি ট্রেন্ডিং টপিক। এটি স্ট্যান্ডার্ড অ্যারের চেয়ে অনেক বেশি সুবিধা দেয়। ArrayList আপনাকে অবজেক্টগুলো একটি সারিতে দক্ষতার সাথে স্টোর করতে দেয় এবং প্রয়োজন না হলে সেগুলো ক্লিয়ার করতে দেয়। এছাড়াও এটি আপনার লিস্টের ওপর স্ট্যান্ডার্ড অপারেশন যেমন সোর্টিং এবং সার্চিং করার সাহায্য করে। আপনি যদি স্ট্যান্ডার্ড অ্যারে ব্যবহার করতেন, তবে এই অপারেশনগুলোর জন্য নিজে লজিক লিখতে হতো, যেটি অতিরিক্ত সময় এবং যত্ন দরকার করত।
দীর্ঘ সুবিধার তালিকার কারণে, ArrayList-এর প্রয়োগ ব্যাপক পরিসরে রয়েছে। যাইহোক, একটি গুরুত্বপূর্ণ অপারেশন যা ArrayList-এ বিল্ট-ইন নেই সেটি হলো প্রিন্ট করা। ArrayList প্রিমিটিভ ডেটা টাইপ (ইন্টিজার এবং স্ট্রিং-এর মতো) বা আরও অ্যাডভান্সড ডেটা টাইপ (কাস্টম ক্লাসের মতো) দিয়ে গঠিত হতে পারে। এই প্রতিটি ক্ষেত্রে, ArrayList প্রিন্ট করার জন্য ভিন্ন স্টেপ প্রয়োজন।
এই আর্টিকেলে, আমরা জাভাতে ArrayList প্রিন্ট করার টপ তিনটি উপায় দেখব, উপরের দুটি ArrayList টাইপ কভার করে। আর विलম্ব না করে শুরু করা যাক!
জাভা ArrayList প্রিন্ট: তিনটি উপায়
উপরোক্ত الحية, ArrayList-এর দুটি টাইপ আছে: একটি যা প্রিমিটিভ, সিম্পল ডেটা টাইপ (ইন্টিজার এবং ফ্লোট-এর মতো) রাখা অবজেক্ট ধারণ করে, এবং অন্যটি কাস্টম ক্লাসের মাধ্যমে ইনস্ট্যানশিয়েট করা অবজেক্ট ধারণ করে। এই দুটি টাইপের ArrayList প্রিন্ট করার অনেক উপায় আছে।
জাভাতে ArrayList প্রিন্ট করার টপ তিনটি উপায় হলো:
- ফর লুপ ব্যবহার করা
- println কমান্ড ব্যবহার করা
- toString() ইমপ্লিমেন্টেশন ব্যবহার করা
মেথড ১: ফর লুপ ব্যবহার করা
ফর লুপ একটি লিস্ট বা অ্যারে melalui ইটারেট করার সবচেয়ে সিম্পল উপায়ের একটা। এই মেথড সিম্পল অ্যারে এবং ArrayList দুটোর জন্যও ভালো কাজ করে, কারণ সব আইটেম একে একে ইটারেট করলে আপনি প্রতিটিকে যথাযথভাবে হ্যান্ডল করতে পারেন।
এই মেথড আপনাকে প্রতিটি এলিমেন্টের জন্য স্পেসিফিক ইমপ্লিমেন্টেশন ডিফাইন করতে সাহায্য করে। ফর লুপের সিনট্যাক্স নিচে দেওয়া হলো:
for (int i=0; i<arr.size(); i++) { // Assuming arr is an ArrayList object int current = arr.get(i); // Do something with the current element here } এখন ফর লুপের কিছু সাধারণ ব্যবহার দেখি যা অবজেক্টের অ্যারে ট্রাভার্স করতে ব্যবহৃত হয়:
ফর লুপ উদাহরণ
আপনি ArrayList-এর সব এলিমেন্ট প্রিন্ট করতে ফর লুপ ব্যবহার করতে পারেন:
ArrayList<Integer> arr = new ArrayList<>(); arr.add(3); arr.add(4); arr.add(5); arr.add(6); for (int i=0; i<arr.size(); i++) { int curr = arr.get(i); System.out.println(curr); } এটিকে এক ধাপ আগে নিয়ে যেতে, আপনি যেকোনো কন্ডিশন বেস করে প্রতিটি এলিমেন্টের জন্য স্পেসিফিক কেস ডিফাইন করতে পারেন:
ArrayList arr = new ArrayList<>(); arr.add(3); arr.add(5l); arr.add("Hello World!"); for (int i=0; i<arr.size(); i++) { if (arr.get(i) instanceof Integer) System.out.println(arr.get(i) + " is a number"); else if (arr.get(i) instanceof String) System.out.println(arr.get(i) + " is a string"); else if (arr.get(i) instanceof Long) System.out.println(arr.get(i) + " is a long"); } কবে এই মেথড ব্যবহার করবেন
ফর লুপ সেই পরিস্থিতিতে সবচেয়ে উপযুক্ত যেখানে আপনার আপেক্ষিকভাবে ছোট সেট অফ এলিমেন্ট আছে এবং তাদের টাইপ বেশি ভিন্ন নয়। আপনার কাছে ২০ আইটেমের একটি লিস্ট আছে যা বা ইন্টিজার (int) বা স্ট্রিং, তবে ফর লুপই উপায়। আপনার কাছে ১০০-এর বেশি আইটেমের লিস্ট আছে যা স্ট্রিং, int, বুলিয়ান বা যেকোনো কিছু হতে পারে, তবে ফর লুপ ব্যবহার করা খুব জটিল হবে।
মেথড ২: println কমান্ড ব্যবহার করা
println কমান্ড প্রিমিটিভ ডেটা টাইপ দিয়ে তৈরি ArrayList-এ সরাসরি ব্যবহার করা যায়। জাভাতে প্রিমিটিভ ডেটা টাইপগুলো হলো স্ট্রিং, ইন্টিজার, ফ্লোট, লং, ডাবল, এবং বুলিয়ান। যদি লিস্টটি এমন ডেটা দিয়ে গঠিত থাকে যা এই টাইপগুলোর সাথে মেলে না, তবে এই মেথডে প্রিন্ট করা যাবে না।
এই মেথডের সিনট্যাক্স সিম্পল:
System.out.println(arr); // Assuming arr is an ArrayList object
এই মেথড কাজ করার কারণ হলো সব প্রিমিটিভ ডেটা টাইপ সরাসরি স্ট্যান্ডার্ড আউটপুট ডিভাইসে প্রিন্ট করা যায়। সেগুলো প্রিন্টযোগ্য ফরম্যাটে পার্স করতে হয় না। অন্য ডেটা, যেন কাস্টম ক্লাসের ইনস্ট্যান্সে স্টোর করা থাকে, সেগুলো println কমান্ড সরাসরি পার্স করতে পারে না, তাই এই মেথড সেক্ষনে কাজ করবে না।
println উদাহরণ
আপনি যদি একটি সিম্পল ইন্টিজার ArrayList প্রিন্ট করতে চান, তবে এখানে কীভাবে করবেন:
ArrayList<Integer> arr = new ArrayList<>(); arr.add(5); arr.add(4); arr.add(6); System.out.println(arr); # => [5, 4, 6]
আপনি যদি হেটেরোজেনাস ArrayList প্রিন্ট করতে চান, তবে সেটাও কাজ করবে:
ArrayList<> arr = new ArrayList<>(); arr.add(7); arr.add("Foo"); arr.add(12l); System.out.println(arr); # => [7, Foo, 12] কবে এই মেথড ব্যবহার করবেন
এই মেথড সেই পরিস্থিতিতে সবচেয়ে উপযুক্ত যেখানে আপনার একটি ছোট, সিম্পল আইটেমের লিস্ট আছে এবং আপনি ডিবাগিং উদ্দেশ্যে সেটা প্রিন্ট আউট করতে চান। লক্ষ্য করুন যে এই মেথড আগেরটি 만큼 ফ্লেক্সিবল নয়, এবং আউটপুট ডিভাইসে প্রিন্ট হওয়া কন্টেন্ট ফরম্যাট করা যাবে না।
অতিরিক্তভাবে, যদি লিস্টে যেকোনো নন-প্রিমিটিভ ডেটা থাকে, তবে এর ভ্যালু ডিভাইসে প্রিন্ট হবে না। বরং মেমরিতে এর লোকেশনের পয়েন্টার প্রিন্ট হবে।
class Foo { int bar; public Foo(int bar){ this.bar = bar; }; } ArrayList<> arr = new ArrayList<>(); arr.add(4); arr.add(new Foo(40)); System.out.println(arr); # => [4, 34n2dsf@Foo]; মেথড ৩: toString() মেথড ইমপ্লিমেন্ট করা
এই মেথডে আগের মেথডের কমीं নেই। নন-প্রিমিটিভ অবজেক্ট সরাসরি আউটপুটে প্রিন্ট করা যেতে না কারণ কম্পাইলার জানে না সেগুলো কীভাবে প্রিন্ট করতে হবে। toString() মেথড আপনাকে কম্পাইলারকে বলে দেয় ক্লাসের অবজেক্টগুলো কমান্ড লাইনে কীভাবে প্রিন্ট করতে হবে।
গত উদাহরণের Foo ক্লাস নিই:
class Foo { int bar; public Foo(int bar){ this.bar = bar; }; } এটিকে প্রিন্ট-ফ্রেন্ডলি করতে হলে ক্লাস ডেফিনিশনে toString() মেথড ওভাররাইড এবং ডিফাইন করতে হবে:
class Foo { int bar; public Foo(int bar){ this.bar = bar; }; public String toString() { return "Bar: " + String.valueOf(bar); } } এখন আপনি যদি Foo-এর একটি ইনস্ট্যান্স তৈরি করেন:
এবং প্রিন্ট করেন:
আপনি আগে ডিফাইন করা আউটপুট পাবেন:
এই ছোট ফিক্সটি println মেথডের সাথে কম্বাইন করে সব ধরনের ArrayList সহজে এবং দ্রুত প্রিন্ট করা যায়।
toString() উদাহরণ
মেথড ২-এর শেষ উদাহরণ নিই এবং এটাকে println-ফ্রেন্ডলি করি:
class Foo { int bar; public Foo(int bar){ this.bar = bar; }; } ArrayList<> arr = new ArrayList<>(); arr.add(4); arr.add(new Foo(40)); System.out.println(arr); # => [4, Foo@2a139a55]; এখানে আপনাকে শুধু Foo ক্লাসে toString() ডেফিনিশন অ্যাড করতে হবে:

"Career Karma আমার জীবনে এসেছিল তখন আমাকে সবচেয়ে বেশি দরকার ছিল এবং দ্রুত একটি বুটক্যাম্পের সাথে ম্যাচ করতে সাহায্য করল। দু মাস পর গ্র্যাজুয়েট করার পর, আমি আমার স্বপ্নের জব পেলাম যা আমার মূল্যবোধ এবং জীবনের লক্ষ্যের সাথে মিলে যেত!"
Venus, Software Engineer at Rockbot
Find Your Bootcamp Match
class Foo { int bar; public Foo(int bar){ this.bar = bar; }; public String toString(){ return "Value: " + String.valueOf(bar); } } Now, the println statement will give the desired output: // # => [4, Value: 40] কবে এই মেথড ব্যবহার করবেন
এই মেথড সেই পরিস্থিতিতে উপযুক্ত যেখানে আপনাকে হেটেরোজেনাস ArrayList প্রিন্ট করতে হয়, বা একটি কাস্টম ক্লাস দিয়ে বनी হোমোজেনাস ArrayList। ক্লাসে একটু মেথড ডেফিনিশন আপনাকে ফর লুপ ব্যবহারের সমস্যা থেকে বাঁচায়।
যাইহোক, এই মেথড সহজ পরিস্থিতিতে ওভারকিল লাগতে পারে। আপনার কাছে ছোট এলিমেন্টের লিস্ট থাকলে, আপনি সহজতর এবং সিম্পল লজিকের জন্য ফর লুপ মেথড বিবেচনা করতে পারেন।
উপসংহার
জাভা ArrayList প্রিন্ট করা একটি সহজ কাজ নয়। ArrayList-এর কন্টেন্ট যত বেশি ডাইনামিক হবে, তত বেশি কঠিন হবে লিস্টকে স্ট্যান্ডার্ড আউটপুটে প্রিন্ট করা। println কমান্ড অধিকাংশ কেস কভার করতে পারে, কিন্তু toString() ওভাররাইডও প্রয়োজন হতে পারে কাজটি সম্পন্ন করতে।
এই আর্টিকেলে, আমরা ArrayList প্রিন্ট করার তিনটি উপায় কভার করেছি। আমরা তাদের সিনট্যাক্স, উদাহরণ, এবং কোন পরিস্থিতিতে সেগুলো সবচেয়ে উপযুক্ত সেটি দেখেছি। আরও অ্যাডভান্সড জাভা রিসোর্সের জন্য, জাভা শিখার আমাদের গাইড এক্সপ্লোর করুন।