Javaالكلاس TreeMap في جافا
- مقدمة
- كونستركتورات الكلاس TreeMap
- دوال الكلاس 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.
| الكونستركتور مع تعريفه | |
|---|---|
| 1 | public TreeMap()هذا الكونستركتور الإفتراضي في الكلاسTreeMap, يستخدم لإنشاء كائن نوعهTreeMapفارغ يرتب العناصر التي يتم إدخالها فيه بشكل تصاعدي Ascending. | 
| 2 | public TreeMap(Collection c)يستخدم هذا الكونستركتور لإنشاء كائن نوعهTreeMapيحتوي على عناصر كائن الـCollectionالذي نمرره له كـ Argument. | 
| 3 | public TreeMap(Map m)يستخدم هذا الكونستركتور لإنشاء كائن نوعهTreeMapيحتوي على عناصر كائن الـMapالذي نمرره له كـ Argument. | 
| 4 | public TreeMap(Comparator c)يستخدم هذا الكونستركتور لإنشاء كائن نوعهTreeMapفارغ يرتب العناصر التي يتم إدخالها فيه على أساس كائن الـComparatorالذي نمرره له كـ Argument.إذاً cعبارة عن كائن نوعهComparatorيمثل الطريقة التي سيعتمدها كائن الـTreeMapفي مقارنة قيم عناصره. | 
دوال الكلاس TreeMap
	الجدول التالي يحتوي على جميع دوال الكلاس TreeMap.
| الدالة مع تعريفها | |
|---|---|
| 1 | public Object put(Object key, Object value)تستخدم لإضافة عنصر جديد في كائن الـTreeMap.
 | 
| 2 | public Object putAll(Map m)تضيف جميع عناصر الكائنmالذي نمرره لها كـ Argument في كائن الـTreeMap. | 
| 3 | public Object remove(Object key)تحذف العنصر الذي يملك المفتاح الذي نمرره لها كـ Argument. | 
| 4 | public void clear()تمسح جميع العناصر الموجودة في كائن الـTreeMap. | 
| 5 | public Object clone()تنشئ نسخة من كائن الـTreeMap. | 
| 6 | public Object get(Object key)ترجع قيمة المفتاح الذي نمرره لها كـ Argument.في حال كان كائن الـ TreeMapلا يحتوي على المفتاح الذي مررناه لها, ترجع القيمةnull. | 
| 7 | public boolean containsValue(Object value)ترجعtrueإذا كان كائن الـTreeMapيحتوي على القيمة التي نضعها لها كـ Argument. | 
| 8 | public boolean containsKey(Object value)ترجعtrueإذا كان كائن الـTreeMapيحتوي على المفتاح الذي نضعه لها كـ Argument. | 
| 9 | public Set entrySet()ترجع كائن نوعهSetيملك جميع عناصر ( مفاتيح + قيم ) الكائن الـTreeMap. | 
| 10 | public Set keySet()ترجع كائن نوعهSetيملك جميع مفاتيح الكائن الـTreeMap. | 
| 11 | public Collection values()ترجع كائن نوعهCollectionيملك جميع قيم الكائن الـTreeMap. | 
| 12 | public boolean isEmpty()ترجعtrueفي حال كان كائن الـTreeMapفارغاً. | 
| 13 | public int size()ترجع عدد العناصر الموجودة في كائن الـTreeMap. | 
| 14 | public Object firstKey()ترجع كائن يمثل أول مفتاحkeyموجود في كائن الـTreeMap.ملاحظة: قيمته ستكون أصغر قيمة لأن المفاتيح في هذا الكائن تترتب فيه بشكل تصاعدي. | 
| 15 | public Object lastKey()ترجع كائن يمثل آخر مفتاحkeyموجود في كائن الـTreeMap.ملاحظة: قيمته ستكون أكبر قيمة لأن المفاتيح في هذا الكائن تترتب فيه بشكل تصاعدي. | 
| 16 | public SortedMap headMap(Object end)ترجع كائن نوعهSortedMapيحتوي على جميع عناصر كائن الـTreeMapالذي قام باستدعائها الموجودة فيه قبل الكائنend. | 
| 17 | public SortedMap tailMap(Object Start)ترجع كائن نوعهSortedMapيحتوي على جميع عناصر كائن الـTreeMapالذي قام باستدعائها إبتداءاً من الكائنstartحتى آخر عنصر موجود فيه. | 
| 18 | public SortedMap subMap(Object start, Object end)ترجع كائن نوعهSortedMapيحتوي على جميع عناصر كائن الـTreeMapالذي قام باستدعائها إبتداءاً من الكائنstartوصولاً إلى الكائنend. | 
| 19 | public Comparator comparator()ترجع كائن نوعهComparatorيمثل الإنترفيس المستخدم في مقارنة العناصر.ترجع nullفي حال لم تقم بتغيير الإنترفيس الإفتراضي. | 
مثال شامل
في المثال التالي قمنا بتعريف كائن نوعه TreeMap, إسمه tm, ثم أدخلنا فيه 12 عنصر.
بعدها قمنا بتخزين جميع المفاتيح في كائن نوعه Iterator, إسمه keys.
		و قمنا أيضاً بتخزين جميع القيم في كائن نوعه Iterator, إسمه values.
بعدها عرضناهم كجدول يتألف من عامودين من خلال الحلقة while.
		لاحظ أنه تم عرضهم بترتيب تصاعدي حسب المفاتيح.
في الأخير قمنا بالبحث عن قيمة مفتاح أدخالناه سابقاً.
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
 
                