CodeGym /Java Blog /এলোমেলো /জাভা তালিকা
John Squirrels
লেভেল 41
San Francisco

জাভা তালিকা

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

জাভা তালিকা ইন্টারফেস

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

জাভা তালিকা পদ্ধতি

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

তালিকা বাস্তবায়ন

যেহেতু তালিকা একটি ইন্টারফেস, প্রোগ্রামগুলিকে এটির একটি সুনির্দিষ্ট বাস্তবায়ন তৈরি করতে হবে। আপনি Java সংগ্রহ API-এ নিম্নলিখিত তালিকা বাস্তবায়নের মধ্যে বেছে নিতে পারেন:
  • java.util.ArrayList
  • java.util.LinkedList
  • java.util.Vector
  • java.util.Stack
ArrayList নামক তালিকা ইন্টারফেসের সবচেয়ে জনপ্রিয় বাস্তবায়ন। অনেক কম প্রায়ই, কিন্তু আপনি এখনও বাস্তব কাজগুলিতে লিঙ্কডলিস্টের ব্যবহার দেখতে পারেন, তবে ভেক্টর এবং স্ট্যাক দীর্ঘদিন ধরে নৈতিকভাবে অপ্রচলিত হয়ে পড়েছে, তাই আপনি সম্ভবত এগুলি শুধুমাত্র প্রাচীন উত্তরাধিকার কোড সহ প্রকল্পগুলিতে পাবেন।

তালিকা ইন্টারফেস ঘোষণা

আপনি নিম্নলিখিত উপায়ে জাভা প্রোগ্রামে একটি তালিকা ঘোষণা করতে পারেন:

List<String> myList = new ArrayList();
List myList1 = new ArrayList();
List myList3 = new ArrayList<String>();
ArrayList arrayList = new ArrayList();
একটি ইন্টারফেসের মাধ্যমে একটি নতুন তালিকা ঘোষণা করা ভাল। একইভাবে, আপনি তালিকার অন্যান্য বাস্তবায়ন ঘোষণা করতে পারেন। সংক্ষিপ্ততম উপায়:

Vector myVector = new Vector;
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
এই জাতীয় ঘোষণার সাথে, এই জাতীয় তালিকার উপাদানগুলির ডেটা টাইপ তালিকার প্রাথমিককরণের সময় নির্ধারিত হয়, অর্থাৎ, যখন উপাদানগুলি সেখানে যোগ করা হয়।

List myList = new ArrayList<String>();
Vector myVector = new Vector();
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
stack.add("Paul");
linkedList.add(1);
myVector.add(1.2f);
myList.add('a');
এখন আমাদের স্ট্যাকে শুধুমাত্র স্ট্রিং যোগ করা যেতে পারে, লিঙ্কডলিস্টে পূর্ণসংখ্যা, myVector এ ফ্লোট করে এবং myList হল অক্ষরের একটি তালিকা।

কিভাবে ArrayList কাজ করে

আপনি যদি নিয়মিত অ্যারেগুলির সাথে ইতিমধ্যে পরিচিত হন তবে আপনি ArrayList এর সাথে কিছুটা পরিচিত। আসলে, ArrayList একটি ডাইনামিক অ্যারে, এবং এর ভিতরে একটি সাধারণ অ্যারে। এই অ্যারে ডেটা স্টোর হিসাবে কাজ করে। ArrayList শুধুমাত্র রেফারেন্স প্রকার, তৃতীয় পক্ষের ক্লাস, স্ট্রিং, আউটপুট স্ট্রীম এবং অন্যান্য সংগ্রহ সহ যেকোনো বস্তু সঞ্চয় করে। র‍্যাপার ক্লাসগুলি অ্যারেলিস্টে আদিম ডেটা টাইপ সংরক্ষণ করতে ব্যবহৃত হয়। একটি তালিকা তৈরি করার সময়, আমরা অবিলম্বে এর আকার সেট করতে পারি, কিন্তু বেশিরভাগ ক্ষেত্রে আমরা তা করি না। ডিফল্টরূপে, ArrayList আকার = 10। একটি ArrayList-এ একটি নতুন উপাদান যোগ করলে কেমন দেখায়? প্রথমত, অভ্যন্তরীণ অ্যারেতে পর্যাপ্ত জায়গা আছে কিনা এবং আরও একটি উপাদান ফিট হবে কিনা তা দেখতে একটি পরীক্ষা শুরু করা হয়। যদি স্পেস থাকে, নতুন উপাদানটি তালিকার শেষে যোগ করা হয়, অর্থাৎ শেষ উপাদানটিকে অনুসরণ করে এমন ঘরে। এর সূচক হবে arraylist.size()। যদি আমরা এইমাত্র আমাদের তালিকা তৈরি করি এবং এটি খালি থাকে, এর অর্থ হল arrayList.size() = 0। সেই অনুযায়ী, সূচক 0 সহ ঘরে একটি নতুন উপাদান যোগ করা হবে। যদি দেখা যায় যে পর্যাপ্ত স্থান নেই, একটি নতুন অ্যারেলিস্টের ভিতরে আকার (OldArray * 1.5 এর আকার) + 1। একই নীতি অনুসারে, তালিকার মাঝখানে একটি সন্নিবেশ ঘটে, কিন্তু একই সময়ে, সন্নিবেশিত উপাদান অনুসরণকারী সমস্ত উপাদানগুলি ডানদিকে সরানো হয়েছে। সুতরাং, যদি আমাদের অ্যারেতে 5টি উপাদান থাকে এবং আমাদের 2 নম্বর কক্ষে (অর্থাৎ তৃতীয়টি) একটি উপাদান সন্নিবেশ করতে হয়, তাহলে 0 এবং 1 অ্যারের উপাদানগুলি যথাস্থানে থাকে, একটি নতুন উপাদান 2 কক্ষে উপস্থিত হয় এবং এর পূর্বসূরি তৃতীয় কোষে যায় এবং আরও অনেক কিছু। ইনডেক্স 0 সহ কক্ষে একটি নতুন উপাদান যোগ করা হবে। যদি দেখা যায় যে সেখানে পর্যাপ্ত স্থান নেই, তাহলে ArrayList-এর ভিতরে একটি নতুন অ্যারে তৈরি করা হবে যার আকার (OldArray * 1.5 এর আকার) + 1। একইভাবে নীতি, তালিকার মাঝখানে একটি সন্নিবেশ ঘটে, কিন্তু একই সময়ে, সন্নিবেশিত উপাদান অনুসরণকারী সমস্ত উপাদান ডানদিকে স্থানান্তরিত হয়। সুতরাং, যদি আমাদের অ্যারেতে 5টি উপাদান থাকে এবং আমাদের 2 নম্বর কক্ষে (অর্থাৎ তৃতীয়টি) একটি উপাদান সন্নিবেশ করতে হয়, তাহলে 0 এবং 1 অ্যারের উপাদানগুলি যথাস্থানে থাকে, একটি নতুন উপাদান 2 কক্ষে উপস্থিত হয় এবং এর পূর্বসূরি তৃতীয় কোষে যায় এবং আরও অনেক কিছু। ইনডেক্স 0 সহ কক্ষে একটি নতুন উপাদান যোগ করা হবে। যদি দেখা যায় যে সেখানে পর্যাপ্ত স্থান নেই, তাহলে ArrayList-এর ভিতরে একটি নতুন অ্যারে তৈরি করা হবে যার আকার (OldArray * 1.5 এর আকার) + 1। একইভাবে নীতি, তালিকার মাঝখানে একটি সন্নিবেশ ঘটে, কিন্তু একই সময়ে, সন্নিবেশিত উপাদান অনুসরণকারী সমস্ত উপাদান ডানদিকে স্থানান্তরিত হয়। সুতরাং, যদি আমাদের অ্যারেতে 5টি উপাদান থাকে এবং আমাদের 2 নম্বর কক্ষে (অর্থাৎ তৃতীয়টি) একটি উপাদান সন্নিবেশ করতে হয়, তাহলে 0 এবং 1 অ্যারের উপাদানগুলি যথাস্থানে থাকে, একটি নতুন উপাদান 2 কক্ষে উপস্থিত হয় এবং এর পূর্বসূরি তৃতীয় কোষে যায় এবং আরও অনেক কিছু। তালিকার মাঝখানে একটি সন্নিবেশ ঘটে, কিন্তু একই সময়ে, সন্নিবেশিত উপাদান অনুসরণকারী সমস্ত উপাদান ডানদিকে স্থানান্তরিত হয়। সুতরাং, যদি আমাদের অ্যারেতে 5টি উপাদান থাকে এবং আমাদের 2 নম্বর কক্ষে (অর্থাৎ তৃতীয়টি) একটি উপাদান সন্নিবেশ করতে হয়, তাহলে 0 এবং 1 অ্যারের উপাদানগুলি যথাস্থানে থাকে, একটি নতুন উপাদান 2 কক্ষে উপস্থিত হয় এবং এর পূর্বসূরি তৃতীয় কোষে যায় এবং আরও অনেক কিছু। তালিকার মাঝখানে একটি সন্নিবেশ ঘটে, কিন্তু একই সময়ে, সন্নিবেশিত উপাদান অনুসরণকারী সমস্ত উপাদান ডানদিকে স্থানান্তরিত হয়। সুতরাং, যদি আমাদের অ্যারেতে 5টি উপাদান থাকে এবং আমাদের 2 নম্বর কক্ষে (অর্থাৎ তৃতীয়টি) একটি উপাদান সন্নিবেশ করতে হয়, তাহলে 0 এবং 1 অ্যারের উপাদানগুলি যথাস্থানে থাকে, একটি নতুন উপাদান 2 কক্ষে উপস্থিত হয় এবং এর পূর্বসূরি তৃতীয় কোষে যায় এবং আরও অনেক কিছু।

জাভা তালিকা উদাহরণ (অ্যারেলিস্ট উপলব্ধি)


import java.util.*;

public class ArrayListExample2 {
   public static void main(String[] args) {
       List<String> myFriendsList = new ArrayList();
       //we created list of some objects 
       System.out.println( "the size of myList before init = " + myFriendsList.size());
       myFriendsList.add("Alex");
       myFriendsList.add("Tanya");
       myFriendsList.add("Veloxy");
       myFriendsList.add("Alex");
       myFriendsList.add("Andrew");
       System.out.println(myFriendsList);
       System.out.println( "the size of myList after init = " + myFriendsList.size());

       myFriendsList.add("Ihor");
       System.out.println(myFriendsList);
       System.out.println("the size of my list = " +  myFriendsList.size());


       //here the program will print out the first appearance of "Alex" element
       System.out.println(myFriendsList.indexOf("Alex"));
       //program will print out the first appearance of "Alex" element starting from the element 0

       myFriendsList.remove(3);
       System.out.println(myFriendsList.get(3));
       System.out.println("after removing one of Alex's there is only one Alex: " + myFriendsList);
       System.out.println(myFriendsList.get(1));



       myFriendsList.clear();
       System.out.println("the size of the vector after clear method = " +  myFriendsList.size());

   }
}
এখানে এই প্রোগ্রামের আউটপুট:
init এর আগে myList এর সাইজ = 0 [Alex, Tanya, Veloxy, Alex, Andrew] init এর পরে myList এর সাইজ = 5 [Alex, Tanya, Veloxy, Alex, Andrew, Ihor] আমার তালিকার সাইজ = 6 0 এর পরে Andrew অ্যালেক্সের একটিকে সরিয়ে দিলে কেবল একটি অ্যালেক্স থাকে: [আলেক্স, তানিয়া, ভেলোক্সি, অ্যান্ড্রু, ইহর] তানিয়া পরিষ্কার পদ্ধতির পরে ভেক্টরের আকার = 0 প্রস্থান কোড 0 দিয়ে প্রক্রিয়া শেষ

কিভাবে LinkedList কাজ করে

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

কোড উদাহরণ


import java.util.*;
public class LinkedListTest {

       public static void main(String args[]){

           List myLinkedList= new LinkedList<Integer>();
           myLinkedList.add(1);
           myLinkedList.add(2);
           myLinkedList.add(4);
           System.out.println("three added elements: " + myLinkedList);
           myLinkedList.add(5);
           myLinkedList.remove(1);
           System.out.println(myLinkedList);
           myLinkedList.size(); //3
           
           //add new element at the specified position:
           myLinkedList.add(2,7);
           System.out.println(myLinkedList);
                }
       }
আউটপুট এখানে:
তিনটি যোগ করা উপাদান: [1, 2, 4] [1, 4, 5] [1, 4, 7, 5]

ভেক্টর কোড উদাহরণ

ভেক্টরও একটি গতিশীল অ্যারে উপলব্ধি এবং এটি ArrayList-এর অনুরূপ, কিন্তু সিঙ্ক্রোনাইজড এবং কিছু লিগ্যাসি পদ্ধতি রয়েছে যা সংগ্রহ কাঠামোতে নেই। এখানে এই ক্লাস ব্যবহারের একটি সহজ উদাহরণ।

import java.util.Vector;

public class VectorExample1 {

   public static void main(String[] args) {
       Vector vector = new Vector();
       System.out.println("the size of the empty vector = " +  vector.size());
       vector.add("Alex");
       vector.add("Tanya");
       vector.add("Andrew");
       System.out.println(vector);
       vector.add("Alex");
       vector.add("Ihor");
       System.out.println(vector);
       System.out.println("the size of the vector = " +  vector.size());
       System.out.println("the first element of the vector = " + vector.firstElement());

       //here the program will print out the first appearance of "Johnny" element
       System.out.println(vector.indexOf("Andrew"));
       //program will print out the first appearance of "Johnny" element starting from the element 1
       System.out.println(vector.indexOf("Alex", 1));
       System.out.println(vector);
       vector.clear();
       System.out.println("the size of the vector after clear method = " +  vector.size());

   }
}
আউটপুট হল:
খালি ভেক্টরের আকার = 0 [আলেক্স, তানিয়া, অ্যান্ড্রু] [আলেক্স, তানিয়া, অ্যান্ড্রু, অ্যালেক্স, ইহর] ভেক্টরের আকার = 5 ভেক্টরের প্রথম উপাদান = অ্যালেক্স 2 3 [আলেক্স, তানিয়া, অ্যান্ড্রু, Alex, Ihor] পরিষ্কার পদ্ধতির পরে ভেক্টরের আকার = 0 প্রস্থান কোড 0 দিয়ে প্রক্রিয়া শেষ

জাভা স্ট্যাক ক্লাস কোড উদাহরণ


import java.util.Stack;

public class StackTest {
   public static void main(String[] args) {
       Stack stack = new Stack();
       System.out.println(stack.isEmpty());
       stack.add("Paul");
       stack.add("Johnny");
       stack.add("Alex");
       System.out.println(stack.isEmpty());
       stack.push("Andrew");
       System.out.println(stack);
       stack.pop();
       System.out.println(stack);
   }
}
স্ট্যাকের শুধুমাত্র add() এবং রিমুভ() পদ্ধতি নয় বরং পুশ এবং পপও রয়েছে, এগুলি এই ধরনের ডেটা স্ট্রাকচারের জন্য ক্লাসিক্যাল। স্ট্যাক "প্রথম মধ্যে, শেষ আউট" নিয়ম মেনে চলে - এটি এমন একটি অ্যান্টি-কিউ। অতএব, পপ অপারেশনটি সেই উপাদানটিকে পপ করে যা স্ট্যাকের উপর সর্বশেষ স্থাপন করা হয়েছিল। এখানে আমাদের উদাহরণের আউটপুট:
সত্য মিথ্যা [পল, জনি, অ্যালেক্স, অ্যান্ড্রু] [পল, জনি, অ্যালেক্স]
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION