JDK دو extension از رابطهی Map ارائه میدهد: SortedMap و NavigableMap. NavigableMap خود extension از SortedMap است. TreeMap هر دو را پیادهسازی میکند و یک Red-Black Tree است — دادهساختاری شناختهشده. JDK همچنین ConcurrentSkipListMap را هم ارائه میدهد که پیادهسازی Thread-Safe است.
SortedMap و NavigableMap جفتهای کلید-مقدارشان را بر اساس کلید مرتب نگه میدارند. مشابه SortedSet و NavigableSet، باید روش مقایسهی کلیدها را مشخص کنید. دو راهحل دارید: یا کلاس کلیدها Comparable را پیادهسازی کند، یا هنگام ساخت TreeMap یک Comparator ارسال کنید.
اگر پیادهسازی انتخابی شما TreeMap باشد، میتوانید مجموعه برگشتی از keySet() یا entrySet() را به SortedSet یا NavigableSet cast کنید. NavigableMap متدی به نام navigableKeySet() دارد که مستقیماً NavigableSet برمیگرداند و نیازی به cast نیست.
رابطهی SortedMap متدهای زیر را به Map اضافه میکند:
firstKey() و lastKey(): به ترتیب کوچکترین و بزرگترین کلید نقشه را برمیگردانندheadMap(toKey) و tailMap(fromKey): به ترتیب SortedMapای با کلیدهای کوچکتر از toKey یا بزرگتر یا مساوی fromKey برمیگردانندsubMap(fromKey, toKey): SortedMapای با کلیدهای بزرگتر یا مساوی fromKey و کوچکتر از toKey برمیگردانداین نقشهها نمونههایی از SortedMap و ویوهایی بر پایهی این نقشه هستند. هر تغییری در نقشه اصلی در این ویوها منعکس میشود. این ویوها قابل بهروزرسانی هستند، اما با یک محدودیت: نمیتوانید کلیدی خارج از مرزهای نقشه اضافه کنید.
NavigableMap متدهای بیشتری به SortedMap اضافه میکند. اولین مجموعه به دسترسی به کلیدها و entryهای خاص کمک میکند:
firstEntry() و lastEntry(): به ترتیب کوچکترین یا بزرگترین entry را برمیگردانندceilingKey(key)، ceilingEntry(key)، higherKey(key)، higherEntry(key): کوچکترین کلید یا entry بزرگتر از کلید مورد نظر. متدهای ceiling ممکن است کلیدی برابر کلید مورد نظر برگردانند، در حالی که متدهای higher کلیدی دقیقاً بزرگتر برمیگردانند.floorKey(key)، floorEntry(key)، lowerKey(key)، lowerEntry(key): بزرگترین کلید یا entry کوچکتر از کلید مورد نظر. متدهای floor ممکن است کلیدی برابر کلید مورد نظر برگردانند، در حالی که متدهای lower کلیدی دقیقاً کوچکتر برمیگردانند.مجموعهی دوم امکانات صفمانند ارائه میدهد:
pollFirstEntry(): کوچکترین entry را برمیگرداند و حذف میکندpollLastEntry(): بزرگترین entry را برمیگرداند و حذف میکندمجموعهی سوم نقشه را معکوس میکند، گویی با منطق مقایسهای معکوس ساخته شده است.
navigableKeySet() یک متد راحت است که مستقیماً NavigableSet برمیگرداند و نیازی به cast کردن نتیجهی keySet() نیستdescendingKeySet(): یک NavigableSet بر پایهی نقشه برمیگرداند که قابل پیمایش به ترتیب نزولی استdescendingMap(): یک NavigableMap با همان معنا برمیگرداندهر دو ویو حذف عنصر را پشتیبانی میکنند اما نمیتوانید از طریق آنها عنصری اضافه کنید.
خروجی:
1 2 3 4 5
5 4 3 2 1
مجموعهی آخر متدها دسترسی به ویوهایی از بخشهایی از نقشه را فراهم میکنند:
subMap(fromKey, fromInclusive, toKey, toInclusive): زیرنقشهای که میتوانید لحاظ شدن یا نشدن مرزها را مشخص کنیدheadMap(toKey, inclusive): همینطور برای head maptailMap(fromKey, inclusive): همینطور برای tail mapاین نقشهها ویوهایی روی نقشه فعلی هستند که قابل بهروزرسانی هستند. اما محدودیتی وجود دارد: نمیتوانید کلیدی خارج از مرزهای ویو اضافه کنید.
خروجی:
Map: {2=two, 4=four, 6=six}
Submap from 2 to 4: {2=two, 4=four}
Adding 3
Submap from 2 to 4: {2=two, 3=three, 4=four}
Tailmap starting at 4: {4=four, 6=six}
Adding 5
Tailmap starting at 4: {4=four, 5=five, 6=six}
Headmap up to 2: {2=two}
Adding 1
Headmap up to 2: {1=one, 2=two}
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://dev.java/learn/