Java الكلاس TreeMap في جافا

مقدمة

الكلاس TreeMap يعتبر الكلاس الأكثر تطوراً بين كلاسات المجموعة Map, و هو يستخدم لتخزين العناصر بشكل Key / Value بالإضافة إلى ترتيب هذه العناصر في الذاكرة بشكل تصاعدي Ascending نسبة للـ keys. و هو يحتوي على دوال أخرى تسهل طريقة الوصول للعناصر.

إذاً الـ TreeMap كأنه جدول يتألف من عامودين, الأول يحتوي المفاتيح ( Keys ) و الثاني يحتوي على القيم ( Values ).

هنا كل قيمة يتم تخزينها في كائن الـ TreeMap يجب إعطاءها Key غير مستخدم, لأن كل Key موضوع يسمح لك بالوصول لقيمة واحدة من القيم الموجودة في كائن الـ TreeMap.

خلاصة, كل عنصر يضاف في كائن الـ TreeMap يجب أن يحتوي على كائنين, الأول يمثل المفتاح و الثاني يمثل قيمته.

ملاحظة: كائن الـ TreeMap يمكنه إمتلاك مفتاح واحد نوعه null, و يمكن وضع القيمة null كقيمة لأي مفتاح موجود فيه.


طريقة ترتيب العناصر

إفتراضياً, في حال كانت المفاتيح تمثل أرقام, عندها يتم ترتيبهم من العدد الأصغر إلى العدد الأكبر.
أما في حال كانت المفاتيح تمثل نصوص أو كلمات أو أحرف, عندها يتم ترتيبهم ترتيباً أبجدياً.

كما يمكنك تحديد طريقة ترتيب العناصر بنفسك.


بناؤه

public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, Serializable
	
  • K يقصد بها نوع الكائنات التي تمثل مفاتيح.
  • V يقصد بها نوع الكائنات التي تمثل قيم.

إذاً الكلاس TreeMap يرث من الكلاس AbstractMap, و يطبق الإنترفيسات NavigableMap - Serializable - Cloneable.

كونستركتورات الكلاس TreeMap

الجدول التالي يحتوي على جميع الكونستركتورات الموجودة في الكلاس TreeMap.

الكونستركتور مع تعريفه
public TreeMap() هذا الكونستركتور الإفتراضي في الكلاس TreeMap, يستخدم لإنشاء كائن نوعه TreeMap فارغ يرتب العناصر التي يتم إدخالها فيه بشكل تصاعدي Ascending.
public TreeMap(Collection c) يستخدم هذا الكونستركتور لإنشاء كائن نوعه TreeMap يحتوي على عناصر كائن الـ Collection الذي نمرره له كـ Argument.
public TreeMap(Map m) يستخدم هذا الكونستركتور لإنشاء كائن نوعه TreeMap يحتوي على عناصر كائن الـ Map الذي نمرره له كـ Argument.
public TreeMap(Comparator c) يستخدم هذا الكونستركتور لإنشاء كائن نوعه TreeMap فارغ يرتب العناصر التي يتم إدخالها فيه على أساس كائن الـ Comparator الذي نمرره له كـ Argument.
إذاً c عبارة عن كائن نوعه Comparator يمثل الطريقة التي سيعتمدها كائن الـ TreeMap في مقارنة قيم عناصره.

دوال الكلاس TreeMap

الجدول التالي يحتوي على جميع دوال الكلاس TreeMap.

الدالة مع تعريفها
public Object put(Object key, Object value) تستخدم لإضافة عنصر جديد في كائن الـ TreeMap.
  • key عبارة عن كائن يمثل مفتاح العنصر.
  • value عبارة عن كائن يمثل قيمة العنصر.
public Object putAll(Map m) تضيف جميع عناصر الكائن m الذي نمرره لها كـ Argument في كائن الـ TreeMap.
public Object remove(Object key) تحذف العنصر الذي يملك المفتاح الذي نمرره لها كـ Argument.
public void clear() تمسح جميع العناصر الموجودة في كائن الـ TreeMap.
public Object clone() تنشئ نسخة من كائن الـ TreeMap.
public Object get(Object key) ترجع قيمة المفتاح الذي نمرره لها كـ Argument.
في حال كان كائن الـ TreeMap لا يحتوي على المفتاح الذي مررناه لها, ترجع القيمة null.
public boolean containsValue(Object value) ترجع true إذا كان كائن الـ TreeMap يحتوي على القيمة التي نضعها لها كـ Argument.
public boolean containsKey(Object value) ترجع true إذا كان كائن الـ TreeMap يحتوي على المفتاح الذي نضعه لها كـ Argument.
public Set entrySet() ترجع كائن نوعه Set يملك جميع عناصر ( مفاتيح + قيم ) الكائن الـ TreeMap.
public Set keySet() ترجع كائن نوعه Set يملك جميع مفاتيح الكائن الـ TreeMap.
public Collection values() ترجع كائن نوعه Collection يملك جميع قيم الكائن الـ TreeMap.
public boolean isEmpty() ترجع true في حال كان كائن الـ TreeMap فارغاً.
public int size() ترجع عدد العناصر الموجودة في كائن الـ TreeMap.
public Object firstKey() ترجع كائن يمثل أول مفتاح key موجود في كائن الـ TreeMap.
ملاحظة: قيمته ستكون أصغر قيمة لأن المفاتيح في هذا الكائن تترتب فيه بشكل تصاعدي.
public Object lastKey() ترجع كائن يمثل آخر مفتاح key موجود في كائن الـ TreeMap.
ملاحظة: قيمته ستكون أكبر قيمة لأن المفاتيح في هذا الكائن تترتب فيه بشكل تصاعدي.
public SortedMap headMap(Object end) ترجع كائن نوعه SortedMap يحتوي على جميع عناصر كائن الـ TreeMap الذي قام باستدعائها الموجودة فيه قبل الكائن end.
public SortedMap tailMap(Object Start) ترجع كائن نوعه SortedMap يحتوي على جميع عناصر كائن الـ TreeMap الذي قام باستدعائها إبتداءاً من الكائن start حتى آخر عنصر موجود فيه.
public SortedMap subMap(Object start, Object end) ترجع كائن نوعه SortedMap يحتوي على جميع عناصر كائن الـ TreeMap الذي قام باستدعائها إبتداءاً من الكائن start وصولاً إلى الكائن end.
public Comparator comparator() ترجع كائن نوعه Comparator يمثل الإنترفيس المستخدم في مقارنة العناصر.
ترجع null في حال لم تقم بتغيير الإنترفيس الإفتراضي.

مثال شامل

في المثال التالي قمنا بتعريف كائن نوعه TreeMap, إسمه tm, ثم أدخلنا فيه 12 عنصر.

بعدها قمنا بتخزين جميع المفاتيح في كائن نوعه Iterator, إسمه keys.
و قمنا أيضاً بتخزين جميع القيم في كائن نوعه Iterator, إسمه values.

بعدها عرضناهم كجدول يتألف من عامودين من خلال الحلقة while.
لاحظ أنه تم عرضهم بترتيب تصاعدي حسب المفاتيح.

في الأخير قمنا بالبحث عن قيمة مفتاح أدخالناه سابقاً.


Main.java
import java.util.TreeMap;           // TreeMap هنا قمنا باستدعاء الكلاس
import java.util.iterator;          // iterator هنا قمنا باستدعاء الإنترفيس
 
public class Main {
 
    public static void main(String[] args) {
 
        // و الذي سنضع فيه كود البلد و إسمه tm إسمه TreeMap هنا قمنا بإنشاء كائن نوعه
        TreeMap tm = new TreeMap();
 
        // كل عنصر يحتوي على كود البلد كمفتاح و إسمه كقيمة . لاحظ لاحقاً أنه سيتم عرضهم بالتريتب من المفتاح الأصغر إلى المفتاح الأكبر .tm هنا قمنا بإضافة 12 عنصر في الكائن
        tm.put("+961", "Lebanon");
        tm.put("+962", "Jordan");
        tm.put("+963", "Syria");
        tm.put("+964", "Iraq");
        tm.put("+965", "Kuwait");
        tm.put("+966", "KSA");
        tm.put("+967", "Yaman");
        tm.put("+968", "Oman");
        tm.put("+970", "Palestine");
        tm.put("+212", "Morocco");
        tm.put("+281", "Libya");
        tm.put("+20",  "Egypt");
 
        // أي وضعنا اكواد البلاد فيه .keys بداخل الكائن tm هنا قمنا بتخزين جميع مفاتيح الكائن
        Iterator keys = tm.keySet().iterator();
 
        // أي وضعنا أسماء البلاد فيه .values بداخل الكائن tm هنا قمنا بتخزين جميع قيم الكائن
        Iterator values = tm.values().iterator();
 
        System.out.println("The table below contains all Codes & Countries \n");
        System.out.println("---------------------");
        System.out.println("Code \t | Country");
        System.out.println("---------------------");
 
        // لا يزال يحتوي على مفاتيح keys هنا أنشأنا حلقة تستمر في تكرار نفسها طالما أن الكائن
        // الفكرة هنا المرور على جميع المفاتيح الموجودة و عرض كل مفتاح موجود و قيمته
        while( keys.hasNext() ) {
            System.out.println(keys.next() + "\t | " + values.next());
        }
        System.out.println("---------------------\n");
 
 
        // KSA هنا قمنا بالبحث عن إسم البلد الذي يملك الكود 996+ فكان الجواب
        System.out.println("Which Country use the code +966 ?");
        System.out.println(tm.get("+966"));
 
    }
 
}
		

سنحصل على النتيجة التالية عند التشغيل.

The table below contains all Codes & Countries

---------------------
Code     | Country
---------------------
+20      | Egypt
+212     | Morocco
+281     | Libya
+961     | Lebanon
+962     | Jordan
+963     | Syria
+964     | Iraq
+965     | Kuwait
+966     | KSA
+967     | Yaman
+968     | Oman
+970     | Palestine
---------------------

Which Country use the code +966 ?
KSA
		

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة