java - HashMap, LinkedHashMap এবং TreeMap এর মধ্যে পার্থক্য
(10)
জাভা মধ্যে HashMap
, TreeMap
এবং TreeMap
মধ্যে পার্থক্য কি? আমি আউটপুট কোন পার্থক্য দেখতে না, কারণ তিনটি keySet
এবং values
। Hashtable
কি?
Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet());
print(m1.values());
SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet());
print(sm.values());
LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet());
print(lm.values());
HashMap পুনরাবৃত্তি আদেশ সম্পর্কে একেবারে গ্যারান্টী তোলে না। এটি নতুন উপাদান যোগ করা হয় যখন এমনকি (এবং হবে) এমনকি পরিবর্তন করতে পারেন। TreeMap তাদের তুলনায় কীগুলির "প্রাকৃতিক ক্রম" অনুযায়ী পুনরাবৃত্তি করবে () পদ্ধতি (অথবা একটি বাহ্যিক সরবরাহকারী তুলনাকারী)। উপরন্তু, এটি SortedMap ইন্টারফেস প্রয়োগ করে, যার মধ্যে এই ধরণের ক্রম নির্ভর করে এমন পদ্ধতি রয়েছে। লিঙ্কেড হ্যাশম্যাপটি যাতে মানচিত্রে প্রবেশ করা হয়েছিল সেই ক্রম পুনরাবৃত্তি করবে
কিভাবে পারফরমেন্স পরিবর্তিত হয় তাকান ..
সাজানো মানচিত্র একটি বাস্তবায়ন যা বৃক্ষ মানচিত্র। ঢালের জটিলতা, পেতে এবং এতে রয়েছে কী ক্রিয়া প্রাকৃতিক ক্রমের কারণে O (লগ n)
হ্যাশ মানচিত্র
- এটি জোড়া মান আছে (কী, মান)
- কোন সদৃশ কী মান
- unordered unortered
- এটি একটি নাল কী এবং একাধিক নুল মান দেয়
হ্যাশ টেবিল
- হ্যাশ মানচিত্র হিসাবে একই
- এটি নাল কী এবং নল মান অনুমতি দেয় না
LinkedHashMap
- এটা মানচিত্র বাস্তবায়ন সংস্করণ আদেশ করা হয়
- লিঙ্ক তালিকা এবং হ্যাশিং তথ্য কাঠামো উপর ভিত্তি করে
TreeMap
- আদেশ এবং সাজানো সংস্করণ
- হ্যাশিং তথ্য কাঠামো উপর ভিত্তি করে
আমি চাক্ষুষ উপস্থাপনা পছন্দ:
╔══════════════╦═════════════════════╦═══════════════════╦═════════════════════╗
║ Property ║ HashMap ║ TreeMap ║ LinkedHashMap ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║ Iteration ║ no guarantee order ║ sorted according ║ ║
║ Order ║ will remain constant║ to the natural ║ insertion-order ║
║ ║ over time ║ ordering ║ ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║ Get/put ║ ║ ║ ║
║ remove ║ O(1) ║ O(log(n)) ║ O(1) ║
║ containsKey ║ ║ ║ ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║ ║ ║ NavigableMap ║ ║
║ Interfaces ║ Map ║ Map ║ Map ║
║ ║ ║ SortedMap ║ ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║ ║ ║ ║ ║
║ Null ║ allowed ║ only values ║ allowed ║
║ values/keys ║ ║ ║ ║
╠══════════════╬═════════════════════╩═══════════════════╩═════════════════════╣
║ ║ Fail-fast behavior of an iterator cannot be guaranteed ║
║ Fail-fast ║ impossible to make any hard guarantees in the presence of ║
║ behavior ║ unsynchronized concurrent modification ║
╠══════════════╬═════════════════════╦═══════════════════╦═════════════════════╣
║ ║ ║ ║ ║
║Implementation║ buckets ║ Red-Black Tree ║ double-linked ║
║ ║ ║ ║ buckets ║
╠══════════════╬═════════════════════╩═══════════════════╩═════════════════════╣
║ Is ║ ║
║ synchronized ║ implementation is not synchronized ║
╚══════════════╩═══════════════════════════════════════════════════════════════╝
নিম্নলিখিত হ্যাশম্যাপ এবং TreeMap মধ্যে প্রধান পার্থক্য
HashMap কোন আদেশ বজায় রাখা হয় না। অন্য কথায়, হ্যাশম্যাপ কোন গ্যারান্টি প্রদান করে না যে প্রথমে সন্নিবেশকৃত উপাদানটি প্রথম মুদ্রিত হবে, যেখানে ট্রিসেটের মতই, TreeMap উপাদানগুলিও তার উপাদানগুলির প্রাকৃতিক ক্রম অনুসারে সাজানো হয়
অভ্যন্তরীণ হ্যাশম্যাপ বাস্তবায়ন ব্যবহার হ্যাশিং এবং TreeMap অভ্যন্তরীণভাবে লাল-কালো বৃক্ষ বাস্তবায়ন ব্যবহার করে।
হ্যাশম্যাপ একটি নল কী এবং অনেক নল মান সঞ্চয় করতে পারে। ট্রিপম্যাপটি নাল কী ধারণ করতে পারে না তবে এতে অনেকগুলি নিল মান থাকতে পারে।
হ্যাসম্যাপ মৌলিক ক্রিয়াকলাপগুলির জন্য ধ্রুবক সময়সীমার সময় নেয় যেমন ও ও (ও) পেতে। যেমন ওরাকল ডক্সের মতে, TreeMap পেতে এবং পদ্ধতির জন্য গ্যারান্টিযুক্ত লগ (এন) সময় ব্যয় সরবরাহ করে।
হ্যাশম্যাপ TreeMap এর তুলনায় অনেক দ্রুত, হ্যাশম্যাপের কার্যকারিতা সময়টি বেশিরভাগ ক্রিয়াকলাপগুলির জন্য লগম্যাপের টাইমম্যাপের বিরুদ্ধে ধ্রুবক।
TreeMap তুলনা করার জন্য Tao () পদ্ধতি তুলনা করে যখন HashMap তুলনা সমান () পদ্ধতি ব্যবহার করে।
হ্যাশমেপ মানচিত্র ইন্টারফেস প্রয়োগ করে যখন TreeMap NavigableMap ইন্টারফেস প্রয়োগ করে।
নিম্নোক্ত চিত্র ( বৃহত্তর এক ) এর মধ্যে প্রতিটি শ্রেণিতে শ্রেণির অনুক্রমের কোথায় রয়েছে তা দেখুন। TreeMap SortedMap
না, যখন SortedMap
এবং NavigableMap প্রয়োগ করে।
HashTable
অপ্রচলিত এবং সংশ্লিষ্ট HashTable
ক্লাস ব্যবহার করা উচিত।
সব তিনটি ক্লাস HashMap
, TreeMap
এবং LinkedHashMap
HashMap
java.util.Map
ইন্টারফেস প্রয়োগ করে এবং মানগুলির অনন্য কী থেকে ম্যাপিং প্রতিনিধিত্ব করে।
একটি
HashMap
কী উপর ভিত্তি করে মান রয়েছে।এটা শুধুমাত্র অনন্য উপাদান রয়েছে।
এটি একটি নাল কী এবং একাধিক নল মান থাকতে পারে।
এটা কোন আদেশ বজায় রাখে।
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
- একটি
LinkedHashMap
কী উপর ভিত্তি করে মান রয়েছে। - এটা শুধুমাত্র অনন্য উপাদান রয়েছে।
- এটি একটি নাল কী এবং একাধিক নল মান থাকতে পারে।
এটি হাশম্যাপের মতোই সন্নিবেশ আদেশ বজায় রাখে। // নীচের ক্লাস নিমজ্জন দেখুন
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
- একটি
TreeMap
কী উপর ভিত্তি করে মান রয়েছে। এটি ন্যাভিগেবলম্যাপ ইন্টারফেস প্রয়োগ করে এবং অ্যাবসপ্রেম ক্লাসটি প্রসারিত করে। - এটা শুধুমাত্র অনন্য উপাদান রয়েছে।
- এটি নাল কী থাকতে পারে না তবে একাধিক নল মান থাকতে পারে।
এটি
HashMap
মতোই পরিবর্তে ঊর্ধ্বমুখী ক্রম বজায় রাখে (এর কী এর প্রাকৃতিক ক্রম ব্যবহার করে সাজানো।)।public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable
- একটি হ্যাশ টেবিল তালিকা একটি অ্যারে। প্রতিটি তালিকা একটি বালতি হিসাবে পরিচিত হয়। বালতি অবস্থান হ্যাশকোড () পদ্ধতি কল করে সনাক্ত করা হয়। একটি হ্যাশ টেবিলটি কীসের উপর ভিত্তি করে মান ধারণ করে।
- এটা শুধুমাত্র অনন্য উপাদান রয়েছে।
- এটি কোন নল কী বা মান থাকতে পারে না।
- এটা সিঙ্ক্রোনাইজড হয় ।
এটি একটি উত্তরাধিকার ক্লাস।
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
সমস্ত একটি কী-> মূল্য মানচিত্র এবং কীগুলির মাধ্যমে পুনরাবৃত্তি করার একটি উপায় অফার করে। এই শ্রেণীর মধ্যে সবচেয়ে গুরুত্বপূর্ণ পার্থক্য সময় গ্যারান্টি এবং কী ক্রম।
- HashMap 0 (1) সন্ধান এবং সন্নিবেশ প্রস্তাব। যদি আপনি কীগুলির মাধ্যমে পুনরাবৃত্তি করেন, তবে কীগুলির ক্রমটি মূলত ইচ্ছাকৃতভাবে হয়। এটি লিঙ্ক তালিকা একটি অ্যারের দ্বারা প্রয়োগ করা হয়।
- TreeMap ও (লগ এন) সন্ধান এবং সন্নিবেশ প্রস্তাব। কী আদেশ দেওয়া হয়, তাই আপনি সাজানো ক্রম মধ্যে মাধ্যমে মাধ্যমে পুনরাবৃত্তি প্রয়োজন হলে, আপনি করতে পারেন। এর অর্থ হচ্ছে কীগুলি তুলনীয় ইন্টারফেস বাস্তবায়ন করতে হবে। ট্রিপম্যাপটি একটি লাল-কালো গাছ দ্বারা প্রয়োগ করা হয়।
- LinkedHashMap 0 (1) সন্ধান এবং সন্নিবেশ প্রস্তাব। কী তাদের সন্নিবেশ আদেশ দ্বারা আদেশ করা হয়। এটি দ্বিগুণ লিঙ্কযুক্ত buckets দ্বারা প্রয়োগ করা হয়।
আপনি নিম্নলিখিত ফাংশনে একটি খালি TreeMap, হ্যাশম্যাপ, এবং LinkedHashMap পাস কল্পনা করুন:
void insertAndPrint(AbstractMap<Integer, String> map) {
int[] array= {1, -1, 0};
for (int x : array) {
map.put(x, Integer.toString(x));
}
for (int k: map.keySet()) {
System.out.print(k + ", ");
}
}
প্রতিটি জন্য আউটপুট নীচের ফলাফল মত দেখতে হবে।
হ্যাশম্যাপের জন্য, আউটপুটটি আমার নিজের পরীক্ষায় ছিল, {0, 1, -1}, তবে এটি কোনও অর্ডার হতে পারে। আদেশ কোন গ্যারান্টি আছে।
Treemap, আউটপুট ছিল, {-1, 0, 1}
লিঙ্কডলিস্ট, আউটপুট ছিল, {1, -1, 0}
হ্যাশ মানচিত্র সন্নিবেশ আদেশ সংরক্ষণ করে না।
উদাহরণ। হ্যাশম্যাপ যদি আপনি কীগুলি সন্নিবেশ করান
1 3
5 9
4 6
7 15
3 10
এটা হিসাবে এটি সংরক্ষণ করতে পারেন
4 6
5 9
3 10
1 3
7 15
লিঙ্কযুক্ত হ্যাশম্যাপ সন্নিবেশ আদেশ সংরক্ষণ করে।
উদাহরণ।
যদি আপনি কী সন্নিবেশ করা হয়
1 3
5 9
4 6
7 15
3 10
এটা হিসাবে এটি সংরক্ষণ করা হবে
1 3
5 9
4 6
7 15
3 10
আমরা সন্নিবেশ হিসাবে একই।
বৃক্ষ মানচিত্র ক্রম ক্রম ক্রম মধ্যে Vales সঞ্চয়। উদাহরণ।
যদি আপনি কী সন্নিবেশ করা হয়
1 3
5 9
4 6
7 15
3 10
এটা হিসাবে এটি সংরক্ষণ করা হবে
1 3
3 10
4 6
5 9
7 15
হ্যাশ মানচিত্র
একটি নাল কী থাকতে পারে।
HashMap কোন আদেশ বজায় রাখে।
TreeMap
TreeMap কোন নল কী থাকতে পারে না।
TreeMap আরোহী ক্রম বজায় রাখে।
LinkedHashMap
লিঙ্কেড হ্যাশম্যাপটি সন্নিবেশ আদেশ বজায় রাখার জন্য ব্যবহার করা যেতে পারে, যেগুলিতে কীগুলি মানচিত্রে সন্নিবেশ করা হয় বা এটি অ্যাক্সেস অর্ডার বজায় রাখতেও ব্যবহার করা যেতে পারে, যার উপর কী অ্যাক্সেস করা হয়।
উদাহরণ ::
1) হ্যাশম্যাপ মানচিত্র = নতুন হ্যাশম্যাপ ();
map.put(null, "Kamran");
map.put(2, "Ali");
map.put(5, "From");
map.put(4, "Dir");`enter code here`
map.put(3, "Lower");
for (Map.Entry m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
2) TreeMap মানচিত্র = নতুন TreeMap ();
map.put(1, "Kamran");
map.put(2, "Ali");
map.put(5, "From");
map.put(4, "Dir");
map.put(3, "Lower");
for (Map.Entry m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
3) লিঙ্কযুক্ত হ্যাশম্যাপ মানচিত্র = নতুন লিঙ্কযুক্ত হ্যাশম্যাপ ();
map.put(1, "Kamran");
map.put(2, "Ali");
map.put(5, "From");
map.put(4, "Dir");
map.put(3, "Lower");
for (Map.Entry m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}