হ্যাশম্যাপ, লিংকডহ্যাশম্যাপ এবং ট্রি ম্যাপের মধ্যে পার্থক্য


958

মধ্যে পার্থক্য কি HashMap, LinkedHashMapএবং 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());

উত্তর:


1160

তিনটি ক্লাসই Mapইন্টারফেস বাস্তবায়ন করে এবং বেশিরভাগ ক্ষেত্রে একই কার্যকারিতা সরবরাহ করে। সর্বাধিক গুরুত্বপূর্ণ পার্থক্য হল ক্রম যাতে প্রবেশের মাধ্যমে পুনরাবৃত্তি ঘটবে:

  • HashMapপুনরাবৃত্তি আদেশ সম্পর্কে কোন গ্যারান্টি দেয়। এমনকি নতুন উপাদান যুক্ত হওয়ার সাথে সাথে এটি পুরোপুরি পরিবর্তিত হতে (এবং উইল) করতে পারে।
  • TreeMapকীগুলির "প্রাকৃতিক ক্রম" অনুসারে তাদের compareTo()পদ্ধতি অনুসারে পুনরাবৃত্তি হবে (বা বাহ্যিকভাবে সরবরাহিত Comparator)। অতিরিক্তভাবে, এটি SortedMapইন্টারফেস প্রয়োগ করে , যাতে এই ধরণের ক্রমের উপর নির্ভর করে এমন পদ্ধতি রয়েছে।
  • LinkedHashMap মানচিত্রে প্রবেশের ক্রমগুলি ক্রমে পুনরাবৃত্তি হবে

"হ্যাশটেবল" হ্যাশ-ভিত্তিক মানচিত্রের জেনেরিক নাম। জাভা এপিআইয়ের প্রসঙ্গে, Hashtableসংগ্রহের কাঠামোটি বিদ্যমান থাকার আগে জাভা 1.1 এর দিন থেকে একটি অপ্রচলিত শ্রেণি। এটি আর ব্যবহার করা উচিত নয়, কারণ এর এপিআই অপ্রচলিত পদ্ধতিগুলির সাথে বিশৃঙ্খল যেগুলি ডুপ্লিকেট কার্যকারিতা, এবং এর পদ্ধতিগুলি সিঙ্ক্রোনাইজ করা হয় (যা কার্যকারিতা হ্রাস করতে পারে এবং সাধারণত অকেজো)। ব্যবহারের ConcurrentHashMap hashtable পরিবর্তে।


2
এরপরে ম্যাপটি আসলে কী এবং ম্যাপ, হ্যাশম্যাপ এবং হ্যাশটবগুলের মধ্যে পার্থক্য কী।
কেভিন

5
@ থ্যান্ডব্যান্ড: মানচিত্রটি একটি ইন্টারফেস। হ্যাশম্যাপ এবং হ্যাশটেবল উভয়ই এটি প্রয়োগ করে; আমি যেমন লিখেছি, হ্যাশটেবল একটি উত্তরাধিকার শ্রেণি।
মাইকেল বর্গওয়ার্ট

98
এর মধ্যে একটি উল্লেখযোগ্য পার্থক্য Hashtableএবং HashMapএটি হ্যাশটেবলের মধ্যে, "কী বা মানটি নਾਲ হতে পারে না"। এই সীমাবদ্ধতা পরবর্তীকালে বিদ্যমান নেই।
আইয়ুব

4
@ আশকানএন: হ্যাঁ - বাস্তবে বাছাই বাস্তবায়নের মানক উপায়। ট্রিআম্যাপে একটি কনস্ট্রাক্টর রয়েছে যা তুলনামূলক ব্যবহার করতে লাগে এবং যদি কোনও সরবরাহ না করা হয় তবে এটি তুলনামূলক বাস্তবায়নের জন্য সমস্ত বস্তু যুক্ত হওয়ার প্রত্যাশা করে।
মাইকেল বর্গওয়ার্ট

4
আপনি সন্নিবেশ-ক্রমে অথবা অ্যাক্সেস-অর্ডারে লিংকডহ্যাশম্যাপ পুনরুক্তি চান কিনা তা চয়ন করতে পারেন।
lbalazscs

1606

আমি ভিজ্যুয়াল উপস্থাপনা পছন্দ করি:

╔══════════════╦═════════════════════╦═══════════════════╦═════════════════════╗
║   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               ║
╚══════════════╩═══════════════════════════════════════════════════════════════╝

14
সন্নিবেশ-ক্রমের পাশাপাশি লিংকডহ্যাশম্যাপ অ্যাক্সেস-অর্ডারও সমর্থন করে (বুলিয়ান অ্যাক্সেস-অর্ডার প্যারামের সাথে কনস্ট্রাক্টর ব্যবহার করার সময়)।
আইয়াল স্নাইডার

5
ডাবল লিঙ্কড বালতি? আমি মনে করি যে সন্নিবেশ / অপসারণের ক্রিয়াকলাপগুলির জন্য বালতিটি অনুসন্ধান করার অপ্রয়োজনীয় ওভারহেড যুক্ত করেছে (কারণ এটিতে বস্তুটি রাখার জন্য সঠিক বালতিটি অনুসন্ধান করতে হবে)। আমি সর্বদা ভেবেছিলাম যে লিঙ্কডহ্যাশম্যাপ বাস্তবায়ন মানচিত্রের মতো হবে তবে পুনরাবৃত্তির উদ্দেশ্যে ব্যবহৃত "এন্ট্রি তালিকা" (কোনও লিঙ্কযুক্ত তালিকা হিসাবে থাকতে পারে) এর কিছুটা অতিরিক্ত ওভারহেড থাকবে। আপনি কি নিশ্চিত, শেভচেক? যদি হ্যাঁ, আপনি কি আমাকে কিছু অনলাইন লিঙ্কগুলি ব্যাখ্যা করতে বা দিতে পারেন যা আপনার বিবৃতিটি ফিরিয়ে দেয়?
সাঁই দুব্বাকা

5
@ সাইডুব্বাকা লিংকডহ্যাশম্যাপে ডাবল লিঙ্কযুক্ত বালতি রয়েছে তবে বালতি টেবিলটি হ্যাশম্যাপের রয়েছে। এটি এটি প্রতিস্থাপন করছে না। এর অর্থ হল যে বালতি অ্যাক্সেস করা হ্যাশম্যাপের মতো একইভাবে করা হয়, কারণ লিঙ্কযুক্ত তালিকার কেবল সন্নিবেশ ক্রমে (বা অ্যাক্সেস ক্রম) পুনরাবৃত্তির জন্য রয়েছে।
জেরার্ডো লাস্ট্রা

5
এটি উল্লেখ করার মতো হতে পারে যে ও (1) হ'ল সর্বোত্তম কেস দৃশ্য (যা আমরা সাধারণত ওকে ডাকি না, এই প্রশ্নটি দেখুন )
সেবাস্তিয়ান এস

4
এটিও লক্ষণীয় যে ও (1) সর্বদা ও (লগ এন) এর চেয়ে ভাল হয় না; আপনার যদি খুব দীর্ঘ কী থাকে তবে বিএসটিএস এর উপর ভিত্তি করে কিছু কিছু করার আগে পুরো কীতে একটি ও (এন) হ্যাশ চালাতে হয় এমন কিছুর চেয়ে আরও দ্রুত হতে পারে।
মনিকার লসুইট

65

তিনটিই অনন্য কী থেকে মানগুলিতে ম্যাপিং উপস্থাপন করে এবং তাই মানচিত্রটি বাস্তবায়ন করে ইন্টারফেসটি ।

  1. হ্যাশম্যাপ কীগুলির হ্যাশিংয়ের উপর ভিত্তি করে একটি মানচিত্র । এটি ও (1) পেতে / রাখার কাজগুলি সমর্থন করে supports কী থাকতে হবে এর সামঞ্জস্যপূর্ণ বাস্তবায়নের hashCode()এবংequals() এই জন্য কাজ করতে।

  2. লিংকডহ্যাশম্যাপটি হ্যাশম্যাপের সাথে খুব সমান, তবে এটি আইটেমগুলি যুক্ত (বা অ্যাক্সেস করা) ক্রমে সচেতনতা যুক্ত করে, তাই পুনরাবৃত্তির ক্রম সন্নিবেশকরণ আদেশ (বা নির্মাণের পরামিতিগুলির উপর নির্ভর করে অ্যাক্সেস অর্ডার) এর সমান।

  3. ট্রি ম্যাপ একটি ট্রি ভিত্তিক ম্যাপিং। এর পুট / গেট অপারেশনগুলিতে ও (লগ এন) সময় লাগে take তুলনীয় বা তুলনাকারীর সাথে আইটেমগুলির কিছু তুলনা ব্যবস্থা থাকা দরকার। পুনরাবৃত্তি ক্রম এই প্রক্রিয়া দ্বারা নির্ধারিত হয়।


1
সুতরাং যদি আমি সঠিকভাবে বুঝতে পারি, লিংকডহ্যাশম্যাপ এবং ট্রিম্যাপের মধ্যে পার্থক্যটি কেবলমাত্র পারফরম্যান্সই দেওয়া হয়েছে যে সন্নিবেশনের ক্রমটি প্রাকৃতিক আদেশের মতো?
মোশে শাহম

19
@ মোশিশাহাম যেমন # 2 তে বলেছিলেন: LinkedHashMapপ্রাকৃতিক ক্রমে নয়, সন্নিবেশ ক্রমে পুনরাবৃত্তি হবে। সুতরাং আপনি যদি একটিতে যুক্ত (2,5,3)হন LinkedHashMapএবং এটির জন্য প্রত্যেকটির জন্য একটি করেন তবে এটি ফিরে আসবে 2,5,3। যদি থাকতো 2,5,3একটি থেকে TreeMapএটা ফিরে আসবে 2,3,5
গ্রিঞ্চ

2
গাছের মানচিত্রে আরও অনেক দুর্দান্ত কৌশল রয়েছে। মাথা এবং লেজের মানচিত্রের মতো।
টমাস আহলে

প্রাইভেট ট্রিম্যাপ <স্ট্রিং, ইন্টিজার> মাইসেকশন 2 = নতুন ট্রিম্যাপ <> (); মাইসেকশন 2.পুট ("abc1", 2); mySection2.put ( "abc2", 5); mySection2.put ( "abc3", 3); (পূর্ণসংখ্যা x: mySication2.values ​​()) {লগ.ই ("এলওজি", "ট্রিম্যাপ ====" + এক্স); } এটি আমাকে আইটেমগুলি ?োকানোর অনুরূপ আদেশ দিচ্ছে? দয়া করে পরামর্শ দিন কীভাবে এটি লিঙ্কডহ্যাশম্যাপগুলি থেকে আলাদা?
বি.শ্রুতি

2
@ বিশ্রুতি: এটি কারণ আপনার সন্নিবেশ আদেশটি আপনার কীগুলির লিক্সিকোগ্রাফিক ক্রমের সাথে মেলে ("abc1", "abc2", "abc3")। আপনি যদি অন্য কোনও ক্রম সন্নিবেশ করান তবে আপনার কোডটি অভিধানিক ক্রম অনুসারে পুনরাবৃত্তি হবে।
ইয়াল স্নাইডার

47

নিম্নলিখিত চিত্রের ( বৃহত্তর ) প্রতিটি শ্রেণি শ্রেণিবিন্যাসে কোথায় রয়েছে তা দেখুন । TreeMap প্রয়োগ করে SortedMapএবং NavigableMapযখন HashMapহয় না।

HashTableঅপ্রচলিত এবং সংশ্লিষ্ট ConcurrentHashMapবর্গ ব্যবহার করা উচিত। এখানে চিত্র বর্ণনা লিখুন


38

হ্যাশ মানচিত্র

  • এটির জুড়ি মান রয়েছে (কীগুলি, মানগুলি)
  • কোন সদৃশ কী মান
  • আনর্ডারড অরসোর্টার্ড
  • এটি একটি নাল কী এবং একাধিক নাল মানকে অনুমতি দেয়

হ্যাশ টেবিল

  • হ্যাশ ম্যাপ হিসাবে একই
  • এটি নাল কী এবং নাল মানকে অনুমতি দেয় না

LinkedHashMap

  • এটি মানচিত্র প্রয়োগের সংস্করণ আদেশ করা হয়
  • লিঙ্কযুক্ত তালিকা এবং হ্যাশিং ডেটা স্ট্রাকচারের ভিত্তিতে

TreeMap

  • অর্ডার করা এবং সর্ট সংস্করণ
  • হ্যাশিং ডেটা স্ট্রাকচারের উপর ভিত্তি করে

3
এছাড়াও হ্যাশ টেবিল সিঙ্ক্রোনাইজ করা হয়েছে। যাইহোক, আমি আপনার উত্তরটি পরিষ্কার এবং পরিষ্কার পছন্দ করি।
সুরসিন তানচরোয়েন

35

আমি প্রতিটি ব্যবহার করব কখন, মানচিত্রের সাথে আমার নিজের অভিজ্ঞতা থেকে আরও কিছু ইনপুট:

  • হ্যাশম্যাপ - সেরা-পারফরম্যান্স (দ্রুত) বাস্তবায়ন সন্ধান করার সময় সর্বাধিক কার্যকর।
  • ট্রিম্যাপ (সোর্টার্ড ম্যাপ ইন্টারফেস) - আমি যখন নির্দিষ্ট করে সুনির্দিষ্ট ক্রমে চাবিগুলি বাছাই করতে বা পুনরাবৃত্তি করতে সক্ষম হওয়ার সাথে সম্পর্কিত তখন সর্বাধিক কার্যকর।
  • লিংকডহ্যাশম্যাপ - ট্রি ম্যাপ রক্ষণাবেক্ষণের বর্ধিত ব্যয় ছাড়াই ট্রি ম্যাপ থেকে গ্যারান্টিযুক্ত অর্ডার দেওয়ার সুবিধার সাথে সম্মিলিত। (এটি হ্যাশম্যাপের মতো প্রায় দ্রুত) বিশেষত, লিংকডহ্যাশম্যাপটি removeEldestEntry()পদ্ধতিটিকে ওভাররাইড করে ক্যাশে অবজেক্ট তৈরির জন্য দুর্দান্ত সূচনা প্রদান করে । এটি আপনাকে ক্যাশে অবজেক্ট তৈরি করতে দেয় যা আপনি সংজ্ঞায়িত কিছু মানদণ্ড ব্যবহার করে ডেটা শেষ করতে পারেন।

10
সুনির্দিষ্টভাবে বলতে গেলে, ট্রিআম্যাপ উপাদানগুলিকে ক্রমে রাখে না। এটি চাবিগুলি ক্রমে রাখে।
এলএস

17

তিনটি ক্লাস HashMap, TreeMapএবং ইন্টারফেস LinkedHashMapপ্রয়োগ করে java.util.Mapএবং অনন্য কী থেকে মানগুলিতে মানচিত্র উপস্থাপন করে।

হ্যাশ মানচিত্র

  1. একটি HashMapচাবি উপর ভিত্তি করে মান ধারণ করে।

  2. এটিতে কেবল অনন্য উপাদান রয়েছে।

  3. এটিতে একটি নাল কী এবং একাধিক নাল মান থাকতে পারে।

  4. এটি কোন আদেশ বজায় রাখে ।

    public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

LinkedHashMap

  1. একটি LinkedHashMapচাবি উপর ভিত্তি করে মান ধারণ করে।
  2. এটিতে কেবল অনন্য উপাদান রয়েছে।
  3. এটিতে একটি নাল কী এবং একাধিক নাল মান থাকতে পারে।
  4. এটি হ্যাশম্যাপ পরিবর্তে সন্নিবেশ ক্রম বজায় রাখার মতোই । // নীচে ক্লাস হ্রাস দেখুন

    public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>

TreeMap

  1. একটি TreeMapচাবি উপর ভিত্তি করে মান ধারণ করে। এটি নেভিগিব্যাপ্যাপ ইন্টারফেস প্রয়োগ করে এবং অ্যাবস্ট্রাকম্যাপ শ্রেণি প্রসারিত করে।
  2. এটিতে কেবল অনন্য উপাদান রয়েছে।
  3. এটিতে নাল কী থাকতে পারে না তবে এতে একাধিক নাল মান থাকতে পারে।
  4. HashMapপরিবর্তে এটি আরোহী ক্রম বজায় রাখার মতোই হয় (এর কীটির প্রাকৃতিক ক্রম ব্যবহার করে বাছাই করা।)

    public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable

হ্যাশ টেবিল

  1. একটি হ্যাশটেবল তালিকার একটি অ্যারে। প্রতিটি তালিকা বালতি হিসাবে পরিচিত। হ্যাশকোড () পদ্ধতিতে কল করে বালতির অবস্থান চিহ্নিত করা হয়। একটি হ্যাশটেবলে কীটির উপর ভিত্তি করে মান থাকে।
  2. এটিতে কেবল অনন্য উপাদান রয়েছে।
  3. এটির কোনও নাল কী বা মান নাও থাকতে পারে।
  4. এটি সিঙ্ক্রোনাইজ করা হয়
  5. এটি একটি উত্তরাধিকার শ্রেণি।

    public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable

রেফ: রেফায়ার করুন


হ্যাশম্যাপের বিগ-ও স্বরলিপি ও (1) হওয়া উচিত নয়। এটি সর্বোত্তম কেস এবং হ্যাশ টেবিলগুলির ও (এন) এর নিকৃষ্টতম পরিস্থিতি হিসাবে রয়েছে। এটি আপনার লিঙ্কটি দ্বারা সমর্থিত।
হাকন লাটভিট


@ হাকনলটভিট আমিও এখানে প্রকৃত কোডের জন্য যেতে পরামর্শ দেব
গ্রেপকোড

এটি এখনও বলে যে এটি সবচেয়ে খারাপ ক্ষেত্রে ও (এন)। এটি গাণিতিক ধারণা, এবং এটি ও (1) না বললে আপনি এটি বলতে পারবেন না, যদি না এটি আসলে ও (1) হয়। আপনি এখানে কিছু সত্যই ভাল হ্যাশিং ফাংশন ধরে নিচ্ছেন। আমি বোঝাতে চাইছি, আমরা টেরিয়ারফ্যাশ হ্যাশকী {@ ওভাররাইড হ্যাশকোড () - রিটার্ন 4 এর মতো কিছু ব্যবহার করতে পারি; / * ফর্সা ডাইস থ্রো * /} by দ্বারা নির্ধারিত এবং এটিকে অন্য মজাদার জিনিসগুলির জন্য কী হিসাবে ব্যবহার করুন। ও (1) এর উচ্চ সম্ভাবনা থাকা এবং ও (1) থাকা একই নয়। লোকেরা এখানে তাদের বাড়ির কাজকর্মের জন্য সাহায্যের জন্য আসে। আসুন তাদের গ্রেডগুলি নষ্ট না করে ..;)
হাকন লাটভিট

এবং এটি লক্ষণীয় হবে যে জাভা 8-এ আপনার 8 টিরও বেশি বালতি থাকলে ও (লগ (এন)) এর সবচেয়ে খারাপ পরিস্থিতি রয়েছে, দেখুন গ্রেপকোড / ফাইল / রিপোসিটরি.grepcode.com/java/root/jdk/openjdk /… এই সম্পর্কে বিশদ জন্য।
হাকন লাটভিট

14

হ্যাশম্যাপ পুনরাবৃত্তির ক্রম সম্পর্কে গ্যারান্টি দেয় না। এমনকি নতুন উপাদান যুক্ত হওয়ার সাথে সাথে এটি পুরোপুরি পরিবর্তিত হতে (এবং উইল) করতে পারে। TreeMap কীগুলির "প্রাকৃতিক ক্রম" অনুসারে পুনরুক্ত হবে তাদের তুলনামূলক পদ্ধতি () পদ্ধতি (বা একটি বাহ্যিকভাবে সরবরাহকারী তুলক) অনুসারে। অতিরিক্তভাবে, এটি সোর্টার্ড ম্যাপ ইন্টারফেস প্রয়োগ করে, যার মধ্যে এমন পদ্ধতি রয়েছে যা এই সাজানোর ক্রমের উপর নির্ভর করে। লিংকডহ্যাশম্যাপটি মানচিত্রে প্রবেশের ক্রমগুলি পুনরুক্ত করবে

কর্মক্ষমতা কীভাবে পরিবর্তিত হয় তা দেখুন ... এখানে চিত্র বর্ণনা লিখুন

গাছের মানচিত্র যা সাজানো মানচিত্রের একটি বাস্তবায়ন। প্রাকৃতিক অর্ডারের কারণে কী, অপারেশন এবং কী কী রয়েছে তার জটিলতা O


9

@ অ্যামিট: SortedMapএকটি ইন্টারফেস যেখানে অন্যদিকে ইন্টারফেস TreeMapপ্রয়োগ করে এমন একটি শ্রেণি SortedMap। এর অর্থ যদি এটি প্রোটোকল অনুসরণ করে যা SortedMapএর প্রয়োগকারীদের করতে বলে। কোনও গাছ অনুসন্ধান গাছ হিসাবে প্রয়োগ না করা থাকলে আপনাকে অর্ডার করা ডেটা দিতে পারে না কারণ গাছ কোনও ধরণের গাছ হতে পারে। সুতরাং ট্রি ম্যাপকে সাজানো ক্রমের মতো কাজ করার জন্য এটি সোর্টার্ড ম্যাপ প্রয়োগ করে (উদাঃ, বাইনারি অনুসন্ধান ট্রি - বিএসটি, ভারসাম্যপূর্ণ বিএসটি যেমন এভিএল এবং আরবি ট্রি, এমনকি টার্নারি অনুসন্ধান ট্রি - বেশিরভাগ ক্রমবর্ধমান অনুসন্ধানের জন্য ব্যবহৃত হয়) ordered

public class TreeMap<K,V>
extends AbstractMap<K,V>
implements SortedMap<K,V>, Cloneable, Serializable

নট শেল-এ HashMap: ও (1) এ ডেটা দেয়, কোনও অর্ডার নেই

TreeMap : আদেশযুক্ত কী সহ ও (লগ এন), বেস 2 তে ডেটা দেয়

LinkedHashMap: লিঙ্কযুক্ত তালিকার সাথে হ্যাশ টেবিলটি (ইনডেক্সড-স্কিপলিস্টের কথা ভাবেন) যেভাবে এটি গাছের মধ্যে .োকানো হবে সেভাবে ডেটা সংরক্ষণ করার ক্ষমতা। LRU বাস্তবায়নের জন্য সবচেয়ে উপযুক্ত (সম্প্রতি ব্যবহৃত হয়েছে)।


6

নিম্নলিখিত হ্যাশম্যাপ এবং ট্রিম্যাপের মধ্যে প্রধান পার্থক্য রয়েছে

  1. হ্যাশম্যাপ কোনও আদেশ বজায় রাখে না। অন্য কথায়, হ্যাশম্যাপ কোনও গ্যারান্টি সরবরাহ করে না যে সন্নিবেশ করা উপাদানটি প্রথমে মুদ্রিত হবে, যেখানে ট্রিসেটের মতো, ট্রি ম্যাপ উপাদানগুলিও এর উপাদানগুলির প্রাকৃতিক ক্রম অনুসারে বাছাই করা হয়

  2. অভ্যন্তরীণ হ্যাশম্যাপ বাস্তবায়ন হ্যাশিং এবং ট্রি ম্যাপ অভ্যন্তরীণভাবে রেড-ব্ল্যাক ট্রি প্রয়োগকরণ ব্যবহার করে।

  3. হ্যাশম্যাপ একটি নাল কী এবং অনেক নাল মান সংরক্ষণ করতে পারে ree ট্রি ম্যাপে নাল কী থাকতে পারে না তবে এতে অনেকগুলি নাল মান থাকতে পারে।

  4. হ্যাশম্যাপ গেট অ্যান্ড পুট অর্থাত্ ও (১) এর মতো বেসিক ক্রিয়াকলাপগুলির জন্য ধ্রুবক সময় পারফরম্যান্স গ্রহণ করে O ওরাকল ডক্সের সাথে মিল রেখে, ট্রি ম্যাপ গেট অ্যান্ড পুট পদ্ধতির জন্য গ্যারান্টিযুক্ত লগ (এন) সময় ব্যয় সরবরাহ করে।

  5. হ্যাশম্যাপটি ট্রি ম্যাপের চেয়ে অনেক দ্রুত, হ্যাশম্যাপের পারফরম্যান্স সময়টি বেশিরভাগ ক্রিয়াকলাপের জন্য লিম টাইম ট্রিম্যাপের বিপরীতে স্থির থাকে।

  6. হ্যাশম্যাপ তুলনায় তুলনামূলকভাবে () পদ্ধতি ব্যবহার করে যখন ট্রি ম্যাপ ক্রম বজায় রাখার জন্য তুলনামূলকভাবে () পদ্ধতি ব্যবহার করে।

  7. হ্যাশম্যাপ ম্যাপ ইন্টারফেস প্রয়োগ করে যখন ট্রি ম্যাপ ন্যাভিগিব্যাপ্যাপ ইন্টারফেস প্রয়োগ করে।


5

এগুলি একই ইন্টারফেসের বিভিন্ন বাস্তবায়ন। প্রতিটি বাস্তবায়নের কিছু সুবিধা এবং কিছু অসুবিধা (দ্রুত সন্নিবেশ, ধীর অনুসন্ধান) বা তদ্বিপরীত রয়েছে।

বিস্তারিত জানার জন্য এর javadoc তাকান TreeMap , HashMap , LinkedHashMap


হ্যাশটেবলগুলি আসলে কী এবং এটিকে মানচিত্র থেকে পৃথক করে তোলে।
কেভিন

5

হ্যাশ মানচিত্র সন্নিবেশ ক্রম সংরক্ষণ করে না।
উদাহরণ। হ্যাশম্যাপ আপনি যদি কীগুলি inোকাচ্ছেন তবে

1  3
5  9
4   6
7   15
3   10

এটি এটি হিসাবে সংরক্ষণ করতে পারেন

4  6
5  9
3  10
1  3
7  15

লিঙ্কযুক্ত হাশম্যাপ সন্নিবেশ ক্রমের সংরক্ষণ করে।

উদাহরণ।
আপনি কী inোকানো হয়

1  3
5  9
4   6
7   15
3   10

এটি হিসাবে এটি সংরক্ষণ করা হবে

1  3
5  9
4   6
7   15
3   10

আমরা সন্নিবেশ করা একই।

বৃক্ষের মানচিত্র কীগুলির ক্রমবর্ধমান ক্রমে ভেল সংরক্ষণ করে। উদাহরণ।
আপনি কী inোকানো হয়

1  3
5  9
4   6
7   15
3   10

এটি হিসাবে এটি সংরক্ষণ করা হবে

1  3
3  10
4   6
5   9
7   15

4
  • হ্যাশ মানচিত্র:

    • অর্ডার বজায় রাখে না
    • লিংকডহ্যাশম্যাপের চেয়ে দ্রুত
    • বস্তুর স্টোর হিপ জন্য ব্যবহৃত হয়
  • LinkedHashMap:

    • লিংকডহ্যাশম্যাপ সন্নিবেশ আদেশটি বজায় থাকবে
    • হ্যাশম্যাপের চেয়ে ধীর এবং ট্রিম্যাপের চেয়ে দ্রুত
    • আপনি যদি কোনও সন্নিবেশ অর্ডার বজায় রাখতে চান তবে এটি ব্যবহার করুন।
  • TreeMap:

    • ট্রি ম্যাপ একটি গাছ ভিত্তিক ম্যাপিং
    • ট্রিম্যাপ কীটির প্রাকৃতিক ক্রম অনুসরণ করবে
    • হ্যাশম্যাপ এবং লিংকডহ্যাশম্যাপের চেয়ে ধীর
    • যখন আপনার প্রাকৃতিক (ডিফল্ট) ক্রম বজায় রাখা দরকার তখন ট্রি ম্যাপ ব্যবহার করুন

1

সমস্ত একটি কী-> মান মানচিত্র এবং কীগুলির মাধ্যমে পুনরাবৃত্তি করার একটি উপায় অফার করে। এই শ্রেণীর মধ্যে সর্বাধিক গুরুত্বপূর্ণ পার্থক্য হ'ল সময় গ্যারান্টি এবং কীগুলি অর্ডার করা।

  1. হ্যাশম্যাপ 0 (1) চেহারা এবং সন্নিবেশ সরবরাহ করে। আপনি যদি কীগুলির মাধ্যমে পুনরাবৃত্তি করেন তবে কীগুলির ক্রমটি মূলত ইচ্ছামত। এটি লিঙ্কযুক্ত তালিকার একটি অ্যারে দ্বারা প্রয়োগ করা হয়।
  2. ট্রিম্যাপে ও (লগ এন) চেহারা এবং সন্নিবেশ উপলব্ধ করা হয়। কীগুলি অর্ডার করা হয়, সুতরাং আপনার যদি সাজানো ক্রমে কীগুলির মাধ্যমে পুনরাবৃত্তি করতে হবে, আপনি পারেন। এর অর্থ কীগুলি অবশ্যই তুলনামূলক ইন্টারফেস প্রয়োগ করতে পারে ree ট্রি ম্যাপটি একটি রেড-ব্ল্যাক ট্রি দ্বারা প্রয়োগ করা হয়।
  3. লিংকডহ্যাশম্যাপ 0 (1) চেহারা এবং সন্নিবেশ দেয়। কীগুলি তাদের সন্নিবেশ আদেশের মাধ্যমে অর্ডার করা হয়। এটি দ্বিগুণ-সংযুক্ত বালতি দ্বারা প্রয়োগ করা হয়।

কল্পনা করুন আপনি নীচের ফাংশনে একটি খালি ট্রিম্যাপ, হ্যাশম্যাপ এবং লিংকডহ্যাশম্যাপটি পাস করেছেন:

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}, তবে এটি কোনও ক্রম হতে পারে। অর্ডার দেওয়ার কোনও গ্যারান্টি নেই।
ট্রিম্যাপ, আউটপুট ছিল, {-1, 0, 1}
লিংকডলিস্ট, আউটপুট ছিল, {1, -1, 0}


1

এখানে প্রচুর চমকপ্রদ উত্তর পাওয়া গেলেও আমি Mapজাভা ১১-এর সাথে বান্ডিল করা বিভিন্ন বাস্তবায়ন বর্ণনা করার জন্য আমার নিজস্ব টেবিলটি উপস্থাপন করতে চাই ।

আমরা এই পার্থক্যগুলি টেবিল গ্রাফিকের তালিকাভুক্ত দেখতে পাচ্ছি:

  • HashMapহয় সাধারণ Map সাধারণভাবে ব্যবহৃত আপনি কোন বিশেষ প্রয়োজন আছে।
  • LinkedHashMapপ্রসারিত হয় HashMap, এই আচরণটি যুক্ত করে: একটি অর্ডার বজায় রাখে, প্রবেশাগুলি মূলত যে ক্রমটিতে যুক্ত হয়েছিল । কী-মান প্রবেশের জন্য মান পরিবর্তন করে ক্রমে তার স্থান পরিবর্তন করে না।
  • TreeMapখুব একটি অর্ডার বজায় রাখে, তবে (ক) "প্রাকৃতিক" অর্ডার ব্যবহার করে , যার অর্থ ইন্টারফেসে compareToসংজ্ঞায়িত মূল বিষয়গুলির পদ্ধতির মান Comparable, বা (খ) একটি Comparatorপ্রয়োগের আবেদন করে
    • TreeMapSortedMapইন্টারফেস এবং এর উত্তরসূরি, ইন্টারফেস উভয়ই প্রয়োগ করে NavigableMap
  • নুল গুলি: কী হিসাবে কোনও নুলকে অনুমতিTreeMap দেয় না , যখন HashMap&LinkedHashMap না।
    • তিনটিই NULL কে মান হিসাবে অনুমতি দেয়।
  • HashTableহয় উত্তরাধিকার জাভা 1 থেকে, । ক্লাস দ্বারা সরবরাহ করা ConcurrentHashMap। জাভাডোকের উদ্ধৃতি: ConcurrentHashMapএকই ক্রিয়ামূলক স্পেসিফিকেশন মান্য করে Hashtable, এবং প্রতিটি পদ্ধতির সাথে সম্পর্কিত পদ্ধতিগুলির সংস্করণ অন্তর্ভুক্ত করে Hashtable

জাভা 11 এ তাদের বৈশিষ্ট্যগুলির তুলনা করে মানচিত্রের প্রয়োগের টেবিল


0

হ্যাশম্যাপে
একটি নাল কী থাকতে পারে।

হ্যাশম্যাপ কোনও আদেশ বজায় রাখে না।

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) ট্রি ম্যাপ মানচিত্র = নতুন ট্রিম্যাপ ();

    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());
    }

0

তিনটির মধ্যে সবচেয়ে গুরুত্বপূর্ণ হল তারা কীভাবে প্রবেশের ক্রমটি সংরক্ষণ করে।

HashMap- এন্ট্রি ক্রম সংরক্ষণ করে না। যেমন।

public static void main(String[] args){
        HashMap<String,Integer> hashMap = new HashMap<>();
        hashMap.put("First",1);// First ---> 1 is put first in the map
        hashMap.put("Second",2);//Second ---> 2 is put second in the map
        hashMap.put("Third",3); // Third--->3 is put third in the map
        for(Map.Entry<String,Integer> entry : hashMap.entrySet())
        {
            System.out.println(entry.getKey()+"--->"+entry.getValue());
        }
    }

হ্যাশম্যাপের আউটপুট

LinkedHashMap: এটি যাতে প্রবেশের ক্রমটি সংরক্ষণ করেছিল। উদাহরণ:

public static void main(String[] args){
        LinkedHashMap<String,Integer> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put("First",1);// First ---> 1 is put first in the map
        linkedHashMap.put("Second",2);//Second ---> 2 is put second in the map
        linkedHashMap.put("Third",3); // Third--->3 is put third in the map
        for(Map.Entry<String,Integer> entry : linkedHashMap.entrySet())
        {
            System.out.println(entry.getKey()+"--->"+entry.getValue());
        }
    }

লিংকডহ্যাশম্যাপের আউটপুট

TreeMap: এটি কীগুলির আরোহী ক্রমে এন্ট্রিগুলি সংরক্ষণ করে। উদাহরণ:

public static void main(String[] args) throws IOException {
        TreeMap<String,Integer> treeMap = new TreeMap<>();
        treeMap.put("A",1);// A---> 1 is put first in the map
        treeMap.put("C",2);//C---> 2 is put second in the map
        treeMap.put("B",3); //B--->3 is put third in the map
        for(Map.Entry<String,Integer> entry : treeMap.entrySet())
        {
            System.out.println(entry.getKey()+"--->"+entry.getValue());
        }
    }

ট্রিম্যাপের আউটপুট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.