CodeGym /وبلاگ جاوا /Random-FA /رابط نقشه در جاوا
John Squirrels
مرحله
San Francisco

رابط نقشه در جاوا

در گروه منتشر شد

رابط نقشه جاوا چیست؟

رابط نقشه جاوا بخشی از چارچوب مجموعه جاوا است، اما زیرنوع رابط مجموعه نیست. بنابراین در مقایسه با مثلاً Lists یا سایر اشیاء مجموعه، رفتار متفاوتی دارد. هر عنصر Map<Key, Value> یک جفت کلید-مقدار را نشان می دهد. هر دو کلید و مقدار برخی از اشیاء هستند. همه کلیدها در یک نقشه خاص منحصر به فرد هستند، در حالی که مقادیر نیستند، بنابراین می توان آنها را تکرار کرد. ممکن است به نقشه در جاوا فکر کنید، مانند یک فرهنگ لغت یا کاتالوگ فروشگاه آنلاین، جایی که می توانید هر موردی را با استفاده از فهرست منحصر به فرد آن پیدا کنید. کلید یک شناسه منحصر به فرد مقدار در نقشه است. به عنوان مثال در Map<String، Item> String شناسه برخی از کالاها از فروشگاه آنلاین است. طبق مستندات نقشه دارای زیرمجموعه های بعدی است:
    اتصالات ;
  • نقشه همزمان<K,V> ;
  • ConcurrentNavigableMap<K,V> ;
  • LogicalMessageContext ;
  • MessageContext ;
  • NavigableMap<K,V> ;
  • SOAPMessageContext ;
  • Sorted Map<K,V> .
و کلاس ها را اجرا می کند:
  • AbstractMap
  • ویژگی های
  • Auth Provider
  • ConcurrentHashMap
  • ConcurrentSkipListMap
  • EnumMap
  • HashMap
  • قابل هشت
  • IdentityHashMap
  • LinkedHashMap
  • PrinterStateReasons
  • خواص
  • ارائه دهنده
  • RenderingHints
  • SimpleBindings
  • TabularDataSupport
  • نقشه درختی
  • پیش فرض های UI
  • WeakHashMap
  • Java AbstractMap یک کلاس انتزاعی است که بیشتر رابط نقشه را پیاده سازی می کند.
  • Java HashMap یک ساختار داده برای ذخیره جفت های کلید-مقدار با استفاده از جدول هش است.
  • Java TreeMap یک ساختار داده برای استفاده از درخت است، یعنی نمایش با کلیدهای مرتب شده است.
  • WeakHashMap برای استفاده از جدول هش با کلیدهای ضعیف، نمایش با مقادیری که می تواند توسط جمع کننده زباله در صورت عدم استفاده از آنها حذف شود.
  • LinkedHashMap یک نقشه با ترتیب اضافه کردن عناصر است که امکان تکرار به ترتیب درج را فراهم می کند.
  • EnumMap کلاس AbstractMap را برای استفاده با کلیدهای enum گسترش می دهد .
  • IdentityHashMap هنگام مقایسه اسناد از بررسی هم ارزی ارجاعی استفاده می کند، نگاشت با کلیدها در مقایسه با استفاده از عملیات == به جای متد () quals
در اینجا ما به محبوب ترین پیاده سازی های رابط نقشه علاقه مندیم: HashMap، TreeMap و LinkedHashMap. به هر حال، ترتیب عناصر نقشه به پیاده سازی های خاص بستگی دارد. مثلاً TreeMap و LinkedHashMap دارای ترتیب قابل پیش بینی عناصر هستند، در حالی که HashMap اینطور نیست.

روش های نقشه برداری

عملیات اصلی هر نقشه درج، حذف و جستجوی عناصر است.
  • public Object put (کلید Object، Object value) یک عنصر را در نقشه وارد می کند.
  • public void putAll (Map map) نقشه مشخص شده را داخل نقشه درج می کند.
  • public Object remove(Object key) یک ورودی را طبق کلید مشخص شده حذف می کند.
  • Public Object get(Object key) مقدار کلید مشخص شده را برمی گرداند.
  • بولین عمومی containKey (کلید Object) کلید مشخص شده را از این نقشه جستجو می کند
  • public Set keySet () نمای Set را برمی گرداند که شامل همه کلیدها است
  • Public Set enterSet() نمای Set را با تمام کلیدها و مقادیر برمی گرداند.

HashMap چیست؟

HashMap چیست؟ این محبوب ترین پیاده سازی رابط Map<Key,Value> است. این ساختار داده بر اساس اصل هش است.

اصل اصلی کار HashMap: هش کردن

برای درک اینکه هشمپ چیست و چگونه کار می کند، ابتدا در مورد هش و توابع هش صحبت می کنیم. یک تابع هش فقط یک تابع در مفهوم ریاضی است. بنابراین مقداری ورودی (یک شی، یک قطعه داده) وجود دارد و تابع آن را با استفاده از یک قانون مناسب به مقدار خروجی - هش - تبدیل می کند. اغلب هش یک عدد هگزادسیمال از طول مناسب است. قوانین فرآیندهای تبدیل می تواند متفاوت باشد، اما آنها تابع اصول زیر هستند:
  1. یک ورودی (شیء) خاص دارای کد هش خاصی است.
  2. اگر دو شی با هم برابر باشند، کد هش آنها نیز برابر است. عکس این قضیه درست نیست.
  3. اگر کدهای هش متفاوت باشند، قطعاً اشیاء برابر نیستند.
  4. گاهی اوقات اشیاء مختلف می توانند کد هش یکسانی داشته باشند. این یک رویداد بسیار بعید است که "برخورد" نام دارد و یک تابع هش با کیفیت خوب باید احتمال برخورد را به حداقل برساند.
در جاوا، هر شی دارای یک کد هش است. با روش hashCode از کلاس Object، کلاس والدین همه اشیاء جاوا محاسبه می شود. معمولا، توسعه دهندگان این روش را برای کلاس های خود و همچنین متدهای مرتبط با آن را باطل می کنند .

HashMap: چگونه کار می کند

بنابراین Class HashMap<K,V> را به عنوان هر پیاده سازی Map از کلیدها و مقادیر تشکیل شده است. این کلیدها را با استفاده از اصول هش ذخیره می کند. در داخل HashMap، جفت‌های کلید-مقدار در «سطل‌ها» ذخیره می‌شوند، این سطل‌ها با هم یک «جدول»، یک آرایه داخلی از فهرست‌های پیوندی را می‌سازند و اندازه اولیه آن ۱۶ است . HashMap در جاوا از کد هش کلید برای تعیین سطلی استفاده می کند که جفت کلید/مقدار باید در آن نقشه برداری کند: ویژگی مشکل HashMap این است که هر سلول (سطل) جدول [] نه تنها یک جفت بلکه چندین جفت را نگه می دارد. آنها به عنوان یک شی صریح (مانند LinkedList) ذخیره نمی شوند، بلکه به عنوان یک زنجیره ضمنی ذخیره می شوند. این زنجیره به این دلیل ایجاد می شود که هر جفت پیوندی را به جفت بعدی ذخیره می کند. یعنی تمام جفت‌های HashMap در 16 زنجیره پراکنده شده‌اند. هنگامی که یک جفت جدید را در جدول قرار می دهید، هش کلید در نظر گرفته می شود. این هش یک تابع هش کد تعبیه شده در شی کلید نیست. در محدوده 0-15 در نظر گرفته می شود. این جفت به زنجیره جفت های ذخیره شده در سطل با شاخص هش اضافه می شود. این رویکرد به ما سرعت جستجو می دهد. هنگام جستجوی جفت با کلید، نیازی به مرور کل جدول نیست. هش کلید در نظر گرفته می شود و فقط زنجیره ای که در سلول با شاخص هش ذخیره می شود بررسی می شود. اگر تعداد زیادی جفت در HashMap وجود داشته باشد، زنجیره ها بیش از حد طولانی می شوند. سپس اندازه آرایه افزایش می یابد، هش همه اشیاء ذخیره شده مجدداً محاسبه می شود و آنها در امتداد زنجیره های جدید پراکنده می شوند.

اعلامیه هش مپ

اگر به کد کلاس HashMap بروید، اعلان بعدی را خواهید دید:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
جایی که K نوع کلیدهای نگهداری شده توسط این نقشه و V - نوع مقادیر نگاشت شده است. این نمونه ای از اعلان HashMap با کلید Integer و مقدار رشته در کد شما است:

HashMap<Integer, String> myHashMap = new HashMap<Integer, String>();

روش های HashMap

در اینجا لیستی از روش های HashMap آمده است.
  • Object get (کلید Object) مقدار کلید مشخص شده را برمی گرداند.
  • Object put(Key k, Value v) نگاشت مقدار کلید را در نقشه وارد می کند.
  • Object remove(Object key) نگاشت کلید مشخص شده را در صورت وجود از این نقشه حذف می کند.
  • void clear() تمام جفت های کلید-مقدار را از HashMap حذف می کند.
  • Object clone () یک کپی کم عمق از این نمونه HashMap را بدون شبیه سازی کلیدها و مقادیر برمی گرداند.
  • اگر کلید مشخص شده در نقشه پیدا شود، حاوی کلید (کلید Object) boolean true، در صورت نبودن کلید، false را برمی‌گرداند.
  • اگر کلید مشخص شده در نقشه یافت شود، حاوی مقدار (مقدار شیء) boolean true، در صورت عدم یافتن کلید نادرست است.
  • boolean isEmpty() true را در صورت خالی بودن نقشه، false را اگر خالی باشد برمی گرداند.
  • Set keySet () مجموعه کلیدهای واکشی شده از نقشه را برمی گرداند.
  • int size() مقدار نگاشت کلید-مقدار را برمی گرداند.
  • Collection values() مجموعه ای از مقادیر نقشه را برمی گرداند.
  • Object remove(Object key) جفت کلید-مقدار را برای کلید مشخص شده حذف می کند.
  • void putAll(Map m) تمام عناصر نقشه را در نقشه دیگر کپی می کند.

مثال جاوا HashMap

بیایید یک برنامه با Java HashMap Example ایجاد کنیم تا نحوه عملکرد آن را نشان دهیم:

import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;
 
public class HashMap {
 
   public static void main(String[] args) {
 
       {
 
           // HashMap declaration
           HashMap<Integer, String> myHashMap = new HashMap<Integer, String>();
 
           //Adding elements into HashMap
           myHashMap.put(7, "Johnny");
           myHashMap.put(8, "Ivy");
           myHashMap.put(1, "Rick");
           myHashMap.put(4, "Stan");
           myHashMap.put(3, "Kyle");
 
           //print out the map content using Iterator
           Set set = myHashMap.entrySet();
           Iterator iterator = set.iterator();
           while (iterator.hasNext()) {
               Map.Entry mapEntry = (Map.Entry) iterator.next();
               System.out.print("key: " + mapEntry.getKey() + " value: ");
               System.out.println(mapEntry.getValue());
           }
           System.out.println("get an element from myHashMap via key and print the value out:");
           System.out.println(myHashMap.get(8));
           //print out hashMap on standard way:
           System.out.println(myHashMap);
 
           // Get values based on key
           String var = myHashMap.get(2);
           //here we'll get null, we don't have such a key
           System.out.println("Value with key 2: " + var);
           var = myHashMap.get(7);
           System.out.println("Value with key 7: " + var);
 
           // Remove values based on key
           myHashMap.remove(4);
           System.out.println("myHashMap after removing element:");
           System.out.println(myHashMap);
           myHashMap.clear();
           System.out.println("myHashMap after total clearing:");
           System.out.println(myHashMap);
       }
 
   }
}
نتیجه اجرای برنامه:

key: 1 value: Rick
key: 3 value: Kyle
key: 4 value: Stan
key: 7 value: Johnny
key: 8 value: Ivy
get an element from myHashMap via key and print the value out:
Ivy
{1=Rick, 3=Kyle, 4=Stan, 7=Johnny, 8=Ivy}
Value with key 2: null
Value with key 7: Johnny
myHashMap after removing element:
{1=Rick, 3=Kyle, 7=Johnny, 8=Ivy}
myHashMap after total clearing:
{}

نقشه درختی

TreeMap در جاوا نیز رابط Map<Key,Value> را پیاده سازی می کند، اما بر اساس ساختار داده درختی قرمز-سیاه است. یک درخت از "گره ها" و خطوطی تشکیل شده است که گره ها - شاخه ها را به هم متصل می کنند. گره "ریشه" در بالای درخت قرار دارد. از ریشه، شاخه ها و گره ها وجود دارد. این یک ساختار سلسله مراتبی است، ممکن است فکر کنید این گره ها به عنوان "فرزند" ریشه هستند. گره کودک می تواند فرزندان خود - گره های پایین تر داشته باشد. درخت جستجوی باینری ساختاری است که در آن هر گره داخلی یک کلید و گاهی یک مقدار مرتبط را ذخیره می‌کند و دارای دو درخت فرعی متمایز ("چپ" و "راست") است. جستجوی باینری خود متعادل کننده درخت یک درخت جستجوی باینری مبتنی بر گره است که به طور خودکار ارتفاع خود را (حداکثر تعداد سطوح زیر ریشه) در مواجهه با درج و حذف موارد دلخواه کوچک نگه می‌دارد. درخت قرمز-سیاه یک درخت باینری متعادل با ویژگی‌های زیر است:
  • هر گره یا قرمز یا سیاه است
  • ریشه همیشه سیاه است
  • هر برگ یک گره NIL (نوعی خالی، تهی) است و سیاه است
  • اگر یک گره قرمز باشد، فرزندان آن قطعا سیاه هستند.
  • هر مسیر ساده از یک گره به یک برگ زاده شامل همان تعداد گره سیاه است.

ویژگی های نقشه درختی

یک TreeMap از ساختار داده درختی برای ذخیره کلیدها به عنوان گره استفاده می کند و کلیدها را با استفاده از الگوریتم درخت قرمز-سیاه مرتب می کند. بنابراین، TreeMap ورودی های خود را بر اساس ترتیب طبیعی کلیدهای خود مرتب می کند. برای اعداد طبیعی به ترتیب صعودی است، برای رشته ها - ترتیب حروف الفبا. در صورت نیاز به تغییر منطق سفارش می توانید از مقایسه کننده استفاده کنید. مرتب سازی اشیاء به روش طبیعی مزیت بزرگ TreeMap و همچنین یافتن برخی از اشیا با استفاده از فیلترها و شرایط مختلف است.

روش های نقشه درختی

  • Object get(Object key) مقدار کلید مربوطه را برمی گرداند.
  • Object put (کلید Object، مقدار Object) یک نقشه را در نقشه وارد می کند.
  • Object remove(Object key) نگاشت این کلید را در صورتی که TreeMap حاوی آن باشد حذف می کند.
  • اگر این نقشه حاوی یک نقشه برداری برای کلید مشخص شده باشد، حاوی کلید (کلید شی) boolean true برمی گرداند.
  • اگر TreeMap یک یا چند کلید را به مقدار مشخص شده ترسیم کند، حاوی مقادیر بولی (مقدار Object) true برمی گرداند.
  • Object firstKey () اولین کلید را در نقشه مرتب شده برمی گرداند.
  • Object lastKey() آخرین کلید را که در حال حاضر در نقشه مرتب شده است برمی گرداند.
  • void putAll(Map map) همه نگاشت ها را از نقشه مشخص شده به نقشه کپی می کند.
  • Set enterSet() نمای مجموعه ای از نگاشت ها را برمی گرداند
  • int size() مقدار نگاشت کلید-مقدار را برمی گرداند
  • Collection values() نمای مجموعه ای از مقادیر را برمی گرداند
  • Object clone () یک کپی کم عمق از TreeMap را برمی گرداند
  • void clear() تمام نگاشت ها را از TreeMap حذف می کند
  • SortedMap headMap (object key_value) نمای بخشی از نقشه را کمتر از پارامتر key_value برمی گرداند.
  • Set keySet () یک نمای Set از کلیدهای موجود در نقشه درختی را برمی‌گرداند
  • SortedMap subMap (K fromKey، K toKey) نمای بخشی از این نقشه را که کلیدهای آن از fromKey، شامل، تا toKey، انحصاری است، بازمی‌گرداند.
  • Object firstKey () اولین کلید را از TreeMap برمی گرداند.

مثال TreeMap


import java.util.TreeMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
 
public class TreeMapExample {
 
   public static void main(String args[]) {
 
       //TreeMap declaration
       TreeMap<Integer, String> myTreeMap = new TreeMap<Integer, String>();
 
       //put elements to TreeMap
       myTreeMap.put(1, "Stuart");
       myTreeMap.put(23, "Michael");
       myTreeMap.put(7, "Johnny");
       myTreeMap.put(5, "Ivy");
       myTreeMap.put(2, "Alex");
 
       //Display and print out myTreeMap using Iterator
       Set set = myTreeMap.entrySet();
       Iterator iterator = set.iterator();
       while (iterator.hasNext()) {
           Map.Entry myEntry = (Map.Entry) iterator.next();
           System.out.print("key: " + myEntry.getKey() + " value: ");
           System.out.println(myEntry.getValue());
       }
       //TreeMap printed in classical way
       System.out.println(myTreeMap);
       //removing an element with the key =2
       myTreeMap.remove(2);
       //myTreeMap after removing:
       System.out.println(myTreeMap);
   }
}
نتیجه اجرای برنامه:

key: 1 value: Stuart
key: 2 value: Alex
key: 5 value: Ivy
key: 7 value: Johnny
key: 23 value: Michael
{1=Stuart, 2=Alex, 5=Ivy, 7=Johnny, 23=Michael}
{1=Stuart, 5=Ivy, 7=Johnny, 23=Michael}

LinkedHashMap

LinkedHashMap یک ساختار داده است که لیست های پیوندی و نقشه های هش را ترکیب می کند. در واقع، LinkedHashMap کلاس HashMap را گسترش می‌دهد و رابط Map را پیاده‌سازی می‌کند، اما لیست‌های پیوند شده چیست؟ اعلامیه LinkedHashMap:

Map <Integer, String> linkedHashMap = new LinkedHashMap <Integer, String>();
این هش مپ پیوندی جدید ویژگی‌هایی را از HashMap به ارث می‌برد (مانند جدول، loadFactor، آستانه، اندازه، enterSet)، همچنین دو ویژگی خاص دریافت می‌کند:
  • header سر یک لیست با پیوند دوگانه است. در طول مقداردهی اولیه، خود را نشان می دهد
  • accessOrder نحوه دسترسی به عناصر را با استفاده از تکرارکننده نشان می دهد. اگر درست است، به ترتیب آخرین دسترسی. اگر نادرست باشد، دسترسی به ترتیبی است که عناصر درج شده اند.
این لیست پیوندی ترتیب تکرار را تعریف می کند. معمولاً ترتیب قرار دادن کلیدها در نقشه است.

روش های LinkedHashMap

  • Object get (کلید Object) مقداری را که کلید مشخص شده با آن نگاشت شده است برمی‌گرداند، یا اگر این نقشه حاوی نگاشت کلید نباشد، null را برمی‌گرداند.
  • void clear() تمام نگاشت ها را از نقشه حذف می کند.
  • اگر عنصر مشخص شده توسط یک یا چند کلید نگاشت شده باشد، containKey (کلید Object) boolean true برمی گرداند.
  • اگر نقشه قدیمی‌ترین ورودی خود را از نقشه حذف کند، حذف الدست‌های بولی (Map.Entry قدیمی‌تر) true را برمی‌گرداند.
  • Set<Map.Entry<K,V>> enterSet() نمای مجموعه ای از نگاشتهای موجود در این نقشه را برمی گرداند.
  • void forEach (BiConsumer<? super K,? super V> action) عمل داده شده را برای هر ورودی در این نقشه انجام می دهد تا زمانی که همه ورودی ها پردازش شوند یا عمل یک استثنا ایجاد کند.
  • Object getOrDefault (کلید Object، V defaultValue) مقداری را که کلید مشخص شده به آن نگاشت شده را برمی گرداند. اگر نقشه حاوی نقشه ای برای کلید نباشد مقدار default را برمی گرداند.
  • Set<K> keySet() نمای تنظیمی از کلیدهای موجود در نقشه را برمی‌گرداند
  • در صورتی که این نقشه باید قدیمی ترین ورودی خود را حذف کند، حذف الدست بولی (Map.Entry<K,V> قدیمی) true را برمی گرداند.
  • void replaceAll(BiFunction<? super K,? super V,? extends V> function) هر ورودی را با نتیجه فراخوانی تابع داده شده در آن ورودی جایگزین می کند تا زمانی که همه ورودی ها پردازش شوند یا تابع یک استثنا ایجاد کند.
  • Collection<v>values() نمای مجموعه ای از مقادیر موجود در نقشه را برمی گرداند

مثال LinkedHashMap


import java.util.LinkedHashMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
   public class HashLinkedListExample {
       public static void main(String args[]) {
           // LinkedHashMap Declaration
           LinkedHashMap<Integer, String> myLinkedHashMap =
                   new LinkedHashMap<Integer, String>();
 
           //Adding elements into LinkedHashMap
           myLinkedHashMap.put(7, "Johnny");
           myLinkedHashMap.put(12, "Rick");
           myLinkedHashMap.put(1, "Kyle");
           myLinkedHashMap.put(5, "Percy");
           myLinkedHashMap.put(85, "Sebastian");
 
           // Generate a Set of entries
           Set set = myLinkedHashMap.entrySet();
 
           // Display and print out the nodes  of LinkedHashMap
           Iterator iterator = set.iterator();
           while(iterator.hasNext()) {
               Map.Entry me = (Map.Entry)iterator.next();
               System.out.print("key: "+ me.getKey() +
                       " value: "+me.getValue()+"\n");
           }
           //print out HashLinkedMap on standard way:
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(21, "Ivy");
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.remove(12);
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(12, "Ronny");
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(1, "Stan");
           System.out.println(myLinkedHashMap);
       }
   }
در اینجا ما یک LinkedHashMap جدید ایجاد می کنیم، پنج عنصر را اضافه می کنیم، سپس آن را با استفاده از تکرار کننده و به روش کلاسیک چاپ می کنیم. همانطور که می بینید، LinkedHashMap ترتیب درج را حفظ می کند. پس از آن، یک عنصر را از نقشه خود حذف می کنیم، سپس عنصر جدید و بعداً - یک عنصر دیگر با کلید، که از قبل روی نقشه است، اضافه می کنیم. جایگزین مقدار قدیمی نگاشت شده به این کلید می شود. نتیجه اجرای برنامه:

key: 7 value: Johnny
key: 12 value: Rick
key: 1 value: Kyle
key: 5 value: Percy
key: 85 value: Sebastian
{7=Johnny, 12=Rick, 1=Kyle, 5=Percy, 85=Sebastian}
{7=Johnny, 12=Rick, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy}
{7=Johnny, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy}
{7=Johnny, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy, 12=Ronny}
{7=Johnny, 1=Stan, 5=Percy, 85=Sebastian, 21=Ivy, 12=Ronny}

HashMap، TreeMap، LinkedHashMap مقایسه

HashMap، TreeMap و LinkedHashMap پیاده سازی رابط های Map هستند. HashMap و LinkedHashMap ساختارهای داده ای هستند که کلیدها را هش می کنند. TreeMap از ترتیب طبیعی کلیدهای خود برای سازماندهی درخت جستجو استفاده می کند. سفارش:
  • HashMap هیچ نظمی را حفظ نمی کند.
  • TreeMap ورودی ها را به ترتیب صعودی کلیدها مرتب می کند.
  • LinkedHashMap ترتیب درج را حفظ می کند.
کلیدهای تهی:
  • HashMap و LinkedHashMap اجازه می دهد تا یک کلید تهی داشته باشید.
  • LinkedHashMap به کلیدهای تهی اجازه نمی دهد در صورتی که کلیدها از ترتیب طبیعی استفاده می کنند یا Comparator از مقایسه روی صفر پشتیبانی نمی کند.
بیایید یک مثال نقشه جاوا داشته باشیم که شامل هر سه پیاده سازی بررسی شده در این مقاله است:

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.TreeMap;
 
public class CompMapImpl {
 
 
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        LinkedHashMap<Integer, String> linkedHashMap = new LinkedHashMap<>();
        hashMap.put(5, "Ivy");
        hashMap.put(null, "Joker");
        hashMap.put(1, "First");
        hashMap.put(2, "Kyle");
        hashMap.put(-2, "Paul");
        hashMap.put(3, "Sandy");
 
 
        treeMap.put(5, "Ivy");
        //treeMap.put(null,"Joker");
        treeMap.put(1, "First");
        treeMap.put(2, "Kyle");
        treeMap.put(-2, "Paul");
        treeMap.put(3, "Sandy");
 
        linkedHashMap.put(5, "Ivy");
        linkedHashMap.put(null, "Joker");
        linkedHashMap.put(1, "First");
        linkedHashMap.put(2, "Kyle");
        linkedHashMap.put(-2, "Paul");
        linkedHashMap.put(3, "Sandy");
        System.out.println("HashMap");
        System.out.println(hashMap);
        System.out.println("TreeMap");
        System.out.println(treeMap);
        System.out.println("LinkedHashMap");
        System.out.println(linkedHashMap);
 
 
        LinkedHashMap<String, String> linkedHashMap1= new LinkedHashMap<> ();
        linkedHashMap1.put(null, "Andy");
        System.out.println(linkedHashMap1);
    }
}
این هم نتیجه اجرای این برنامه:

HashMap
{null=Joker, 1=First, -2=Paul, 2=Kyle, 3=Sandy, 5=Ivy}
TreeMap
{-2=Paul, 1=First, 2=Kyle, 3=Sandy, 5=Ivy}
LinkedHashMap
{5=Ivy, null=Joker, 1=First, 2=Kyle, -2=Paul, 3=Sandy}
{null=Andy}
همانطور که می بینیم، ترتیب عناصر در HashMap واضح نیست، در treeMap به کلیدها بستگی دارد، در LinkedHashMap به ترتیب درج است. اگر بخواهیم کلید null را در linkedHashMap قرار دهیم، NullPointerException را دریافت خواهیم کرد، اما در linkedHashMap1، جایی که کلیدها String هستند، می‌توانیم این کار را انجام دهیم. نقشه هش بهترین اجرای نقشه همه منظوره است. حداکثر سرعت جستجو، ذخیره سازی سریع و عملیات بازیابی را فراهم می کند، اما باید در مورد ترتیب آشفته آن به یاد داشته باشید. یک نقشه هش پیوندی مزایای HashMap را به ارث می برد و برای کلیدها سفارش دریافت می کند. با این حال، حاوی linkedList است که از نظر حافظه نسبتاً پرهزینه است. در جستجو از HashMap کندتر است و به دلیل حفظ لیست پیوندی، برای افزودن/حذف کمی کندتر است. نقشه درختی کلیدهای مرتب شده به ترتیب صعودی را ذخیره می کند. با این حال، عملکرد عمومی بدتری نسبت به HashMap و LinkedHashMap ارائه می دهد. برای تقویت آموخته هایتان، پیشنهاد می کنیم یک درس ویدیویی از دوره جاوا ما تماشا کنید
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION