مقدمه
سلام به همه پی وی لرنی های عزیز!
HashMap بخشی از مجموعه جاوا است که اجرای اولیه رابط نقشه جاوا را فراهم می کند.
داده ها در جفت های (Key، Value) ذخیره می شوند.
برای دستیابی به یک مقدار باید کلید آن را بدانید.
HashMap به دلیل استفاده از تکنیک Hashing به HashMap معروف است.
TreeMap برای پیاده سازی Map Interface و NavigableMap با Abstract Class استفاده می شود.
نقشه بسته به نوع سازنده مورد استفاده ، طبق ترتیب طبیعی کلیدهای آن، یا مقایسه ای که در زمان تهیه نقشه تهیه شده است، طبقه بندی می شود.
در ایم مقاله قصد داریم که آشنایی با تفاوت های HashMap با TreeMap بپردازیم.
آشنایی با تفاوت های HashMap با TreeMap
شباهت ها بین HashMap و TreeMap
بین hashmap و treemap شباهت های زیر وجود دارد:
یک
هر دو کلاس HashMap و TreeMap رابط های Serializable و Cloneable را پیاده سازی می کنند.
دو
هر دو HashMap و TreeMap کلاس <AbstractMap <K، V را گسترش می دهند.
سه
هر دو کلاس HashMap و TreeMap بر روی جفت های با ارزش اصلی کار می کنند.
چهار
هر دو HashMap و TreeMap مجموعه های غیر هماهنگ هستند.
پنج
هر دو HashMap و TreeMap مجموعه های سریعی را از دست می دهند.
شش
هر دو پیاده سازی بخشی از چارچوب مجموعه و داده های موجود در جفت های Key-Value هستند.
برنامه جاوا به نمایش HashMap و TreeMap می پردازد
در ادامه یک برنامه جاوا وجود دارد که نشان می دهد چگونه عناصر قرار داده شده و از hashmap بازیابی می شوند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package com.edubca.map; import java.util.*; class HashMapDemo { // This function prints frequencies of all elements static void printFrequency(int arr[]) { // Create an empty HashMap HashMap <Integer, Integer> hashmap = new HashMap <Integer, Integer>(); // Iterate through the given array for (int i = 0; i < arr.length; i++) { Integer value = hashmap.get(arr[i]); // If first occurrence of the element if (hashmap.get(arr[i]) == null) hashmap.put(arr[i], 1); // If elements already present in hash map else hashmap.put(arr[i], ++value); } // Print result for (Map.Entry m:hashmap.entrySet()) System.out.println("Frequency of " + m.getKey() + " is " + m.getValue()); } // Main method to test the above method public static void main (String[] args) { int arr[] = {10, 40, 5, 12, 5, 7, 10}; printFrequency(arr); } } |
خروجی
از خروجی مشخص است که hasmap هیچ نظمی را حفظ نمی کند.
در اینجا یک برنامه جاوا وجود دارد که نشان می دهد چگونه عناصر قرار داده شده و بازیابی می شوند.
کد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package com.edubca.map; import java.util.*; class TreeMapDemo { // This function prints frequencies of all elements static void printFrequency(int arr[]) { // Create an empty HashMap TreeMap <Integer, Integer> treemap = new TreeMap <Integer, Integer>(); // Iterate through the given array for (int i = 0; i < arr.length; i++) { Integer value = treemap.get(arr[i]); // If first occurrence of element if (treemap.get(arr[i]) == null) treemap.put(arr[i], 1); // If elements already present in hash map else treemap.put(arr[i], ++value); } // Print result for (Map.Entry m: treemap.entrySet()) System.out.println("Frequency of " + m.getKey() + " is " + m.getValue()); } // Main method to test above method public static void main (String[] args) { int arr[] = {10, 40, 5, 12, 5, 7, 10}; printFrequency(arr); } } |
خروجی
از خروجی مشاهده می شود که کلیدها به ترتیب طبیعی طبقه بندی شده اند.
از این رو Treemap نظم مرتب شده ای را حفظ می کند.
تفاوت اصلی HashMap و TreeMap
در ادامه نکات کلیدی در خصوص تفاوت HashMap و TreeMap ارائه شده است.
ساختار و پیاده سازی ( Structure and Implementation )
Hash Map یک اجرای جدول مبتنی بر هش است.
Hash Map کلاس Abstract Map را گسترش می دهد و رابط Map را پیاده سازی می کند.
Hash Map بر اساس اصل هش کار می کند.
اجرای نقشه به عنوان جدول bucketed hash عمل می کند، اما وقتی اندازه buckets خیلی بزرگ شود ، آنها به گره های Tree تبدیل می شوند که هر یک ساختار مشابهی با گره های TreeMap دارند.
TreeMap کلاس Abstract Map را گسترش می دهد و یک رابط Navigable Map را پیاده سازی می کند.
ساختار داده اصلی برای treemap یک Red-Black tree است.
ترتیب تقلید ( Iteration Order )
ترتیب تقلید Hash Map تعریف نشده است در حالی که عناصر یک TreeMap به ترتیب طبیعی یا به ترتیب دلخواه در آورده می شوند.
کارکرد ( Performance )
از آنجا که Hashmap یک پیاده سازی مبتنی بر hashtable است، عملکرد زمان ثابت را ارائه می دهد که برابر با (O (1 برای اکثر عملیات مشترک است.
زمان لازم برای جستجوی یک عنصر در نقشه هش (O (1 است.
اما اگر یک اجرای نادرست در hasmap وجود داشته باشد، ممکن است منجر به کاهش اضافی حافظه و کاهش عملکرد شود.
TreeMap عملکرد ((O (log (n را ارائه می دهد.
از آنجا که hasmap بر پایه hashtable است، به یک حافظه متناوب نیاز دارد در حالی که یک نقشه برداری فقط از مقدار حافظه مورد نیاز برای نگهداری موارد استفاده می کند.
از این رو HashMap از نظر زمان بهره برداری مقرون به صرفه تر است اما treemap نسبت به HashMap از نظر فضا کارایی بیشتری دارد.
Null Handling
HashMap تقریباً یک null key و بسیاری از مقادیر null را در اختیار شما قرار می دهد ، در حالی که در یک treemap اگرچه مقادیر null است، نمی توان از null key استفاده کرد.
مقایسه کلی
در جدول زیر می توانید تفاوت بین hashmap و treemap را به صورت کلی مشاهده نمایید.
مبنای تفاوت | HashMap | TreeMap |
سینتکس | کلاس عمومی HashMap گسترش می یابد و AbstractMap ، Cloneable ، Serializable را پیاده سازی می کند | کلاس عمومی TreeMap گسترش می یابد و implementsNavigableMap ، Cloneable ، Serializable |
ترتیب | HashMap هیچ نظمی برای عناصر ارائه نمی دهد. | عناصر به ترتیب طبیعی یا سفارشی نظم داده می شوند. |
سرعت | سریع | کند |
Null Keys و مقادیر | تقریباً به یک کلید به عنوان مقادیر null وmultiple null اجازه می دهد. | null را به عنوان کلید نمی پذیرد اما اجازه ی multiple null را می دهد. |
میزان مصرف حافظه | HashMap به دلیل جدول زیرین هاش حافظه بیشتری مصرف می کند. | در مقایسه با HashMap حافظه کمتری مصرف می کند. |
کارایی | فقط ویژگی های اساسی را ارائه می دهد. | ویژگی های بهتری را ارائه می نماید. |
مقایسه متود های مورد استفاده | در اصل برای مقایسه کلیدها از روش () equals استفاده می کند. | از متود () compare و یا () compareTo برای مقایسه کلید ها استفاده می کند. |
رابط اجرا | Map, Serializable و Cloneable | Navigable Map, Serializable و Cloneable |
عملکرد | عملکرد (O (1 را ارائه می دهد. | عملکرد (O (log n را ارائه می دهد. |
ساختار داده ها | از جدول هش به عنوان ساختار داده استفاده می کند. | استفاده از Red-Black Tree برای ذخیره سازی داده ها را ایجاد می کند. |
عناصر همگن و ناهمگن | عناصر همگن و همچنین ناهمگن را امکان پذیر می سازد زیرا هیچ گونه مرتب سازی ای انجام نمی دهد. | به عنوان عناصر همگن اجازه می دهد که مرتب سازی بر آن ها انجام شود. |
Use Cases | وقتی مورد استفاده قرار می گیرد که نیاز به به جفت ارزش کلیدی برای ترتیب دهی نداشته باشیم. | وقتی مورد استفاده قرار می گیرد که نیاز به به جفت ارزش کلیدی یک map برای ترتیب دهی داشته باشیم. |
کلام آخر
از مطالب موجود در این مقاله و آشنایی با تفاوت های HashMap با TreeMap می توان فهمید که hashmap یک اجرای کلی واسط نقشه است که عملکرد (O (1 را فراهم می کند در حالی که Treemap عملکرد (O (log (n) را فراهم می نماید.
از این رو HashMap معمولاً سریعتر از TreeMap است.
به پایان این مقاله آموزشی رسیده ایم.
امیدوارم مطالب این مقاله برای شما مفید بوده باشد.
با پی وی لرن همراه باشید.