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

কীভাবে জাভাতে একটি অভিধান তৈরি করবেন

এলোমেলো দলে প্রকাশিত
আপনি যদি একটি জাভা প্রোগ্রামে একটি অভিধান তৈরি করতে চান, এই সমস্যা সমাধানের সবচেয়ে যৌক্তিক উপায় হল অভিধান ডেটা কাঠামো ব্যবহার করা। এই ডেটা স্ট্রাকচার আপনাকে "কী - মান" আকারে তথ্য সংরক্ষণ করতে দেয়। জাভা-এর একটি বিশেষ অভিধান ক্লাসের পাশাপাশি এর বংশধর, হ্যাশটেবল রয়েছে । এছাড়াও রয়েছে মানচিত্র ইন্টারফেস এবং হ্যাশম্যাপ ক্লাস, যা "কী - মান" জোড়া সঞ্চয় করে। তাই জাভা অভিধান তৈরি করার অনেক উপায় আছে।

অভিধান তথ্য কাঠামো

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

অভিধান ক্লাস এবং এর এক্সটেনশন

শুরুতে, java.util.Dictionary <K, V> util.Dictionary হল একটি বিমূর্ত শ্রেণী। এটি একটি মূল-মান সম্পর্ককে উপস্থাপন করে এবং একটি মানচিত্রের মতো কাজ করে। একটি কী দেওয়া হলে আপনি মান সংরক্ষণ করতে পারেন এবং যখন প্রয়োজন হয় তখন এটির কী ব্যবহার করে মানটি পুনরুদ্ধার করতে পারেন। সুতরাং, এটি কী-মান জোড়ার একটি তালিকা।

public abstract class Dictionary<K,V> extends Object
যেহেতু এই ক্লাসটি বিমূর্ত, আমরা এটির সাথে সরাসরি কাজ করব না। অভিধানে একটি সরাসরি শিশু শ্রেণির হ্যাশটেবল রয়েছে । সুতরাং জাভাতে একটি অভিধান তৈরি করার জন্য আপনি হ্যাশটেবল ব্যবহার করতে পারেন । এই ক্লাসটি একটি হ্যাশ টেবিল প্রয়োগ করে, যা মানগুলির কী ম্যাপ করে এবং যে কোনও নন-নাল অবজেক্টকে কী বা মান হিসাবে ব্যবহার করা যেতে পারে। জাভা হায়ারার্কিতে হ্যাশটেবল অভিধান প্রসারিত করে এবং মানচিত্র প্রয়োগ করে । একটা উদাহরণ দেওয়া যাক। আমরা হ্যাশটেবলের উপর ভিত্তি করে একটি ক্লাসিক অভিধান, একটি টেলিফোন বই তৈরি করতে যাচ্ছি ।

Dictionary phoneBook = new Hashtable();
যদি আমরা এইভাবে লিখি, আমাদের কিছু অপারেশনের জন্য টাইপ কাস্টিং প্রয়োগ করা উচিত। উদাহরণস্বরূপ, একটি কী নিষ্কাশনের জন্য।

System.out.println(((Hashtable) phoneBook).keySet());
এটি এড়াতে, আমরা পরিবর্তন করতে পারি

Dictionary phoneBook = new Hashtable ();
উপরে

Hashtable phoneBook = new Hashtable ();
আমাদের উদাহরণে, স্পষ্টতার জন্য, আমরা প্রথম বিকল্পটি ছেড়ে দেব।

import java.util.Dictionary;
import java.util.Hashtable;

public class DictionaryDemo {

       public static void main(String[] args) {

           Dictionary phoneBook = new Hashtable();

           // put() method
           phoneBook.put("Johnny Walker", "2178");
           phoneBook.put("Andrew Arnold", "1298");
           phoneBook.put("Ivy Briggs", "1877");
           phoneBook.put("Ricky McBright", "2001");

           //print out Hashtable out
           System.out.println(phoneBook);

           //let's get the value using the key
           System.out.println(phoneBook.get("Ivy Briggs"));
           //there's no such key in out Hashtable
           System.out.println(phoneBook.get("Sol Frank"));

           //Is there a record with the "Johnny Walker" key?
           System.out.println(((Hashtable) phoneBook).containsKey("Johnny Walker"));
           //all keys of the Hashtable
           System.out.println(((Hashtable) phoneBook).keySet());
           //values from Hashtable
           System.out.println(((Hashtable) phoneBook).values());

           //the quantity of records
           System.out.println(phoneBook.size());
           //removing one record
           phoneBook.remove("Andrew Arnold");
           System.out.println(phoneBook);
       }
   }
আউটপুট হল:
{অ্যান্ড্রু আর্নল্ড=1298, জনি ওয়াকার=2178, রিকি ম্যাকব্রাইট=2001, আইভি ব্রিগস=1877} 1877 নাল সত্য [অ্যান্ড্রু আর্নল্ড, জনি ওয়াকার, রিকি ম্যাকব্রাইট, আইভি ব্রিগস] [1298, 2178, 1298, 2001 ওয়াকার {801] =2178, রিকি ম্যাকব্রাইট=2001, আইভি ব্রিগস=1877}

একটি অভিধান হিসাবে HashMap

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

import java.util.HashMap;
import java.util.Map;

public class DictionaryDemo2 {

   public static void main(String[] args) {

       Map<String, String> phoneBook = new HashMap<String,String>();
      
       phoneBook.put("Johnny Walker", "2178");
       phoneBook.put("Andrew Arnold", "1298");
       phoneBook.put("Ivy Briggs", "1877");
       phoneBook.put("Ricky McBright", "2001");
      
       System.out.println(phoneBook);
      
       System.out.println(phoneBook.get("Johnny Walker"));
       System.out.println(phoneBook.get("Ivy Briggs"));
       System.out.println(phoneBook.get("Unknown Friend"));
      
       System.out.println(phoneBook.containsKey("Johnny Walker"));
       System.out.println(phoneBook.containsKey("Unknown Friend"));

       System.out.println(phoneBook.keySet());
       System.out.println(phoneBook.values());

       System.out.println(phoneBook.size());

       phoneBook.remove("Andrew Arnold");

       System.out.println(phoneBook);
   }

}
এখানে আউটপুট আছে:
{অ্যান্ড্রু আর্নল্ড=1298, আইভি ব্রিগস=1877, রিকি ম্যাকব্রাইট=2001, জনি ওয়াকার=2178} 2178 1877 নাল সত্য মিথ্যা [অ্যান্ড্রু আর্নল্ড, আইভি ব্রিগস, রিকি ম্যাকব্রাইট, জনি ওয়াকার] [1298, 207, 207] আইভি ব্রিগস=1877, রিকি ম্যাকব্রাইট=2001, জনি ওয়াকার=2178}
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION