হ্যাশসেট বনাম লিঙ্কডহ্যাশসেট


153

তাদের মধ্যে পার্থক্য কী? আমি জানি

একটি লিংকডহ্যাশসেট হ্যাশসেটের একটি আদেশযুক্ত সংস্করণ যা সমস্ত উপাদানগুলিতে দ্বিগুণ-সংযুক্ত তালিকা বজায় রাখে। যখন আপনি পুনরাবৃত্তি আদেশের বিষয়ে যত্নশীল হ্যাশসেটের পরিবর্তে এই শ্রেণিটি ব্যবহার করুন। যখন আপনি একটি হ্যাশসেটের মাধ্যমে পুনরাবৃত্তি করবেন তখন অর্ডারটি অনির্দেশ্য, যখন কোনও লিংকডহ্যাশসেট আপনাকে যে উপাদানগুলিতে sertedোকানো হয়েছিল সেগুলি অনুসারে উপাদানগুলির মাধ্যমে পুনরাবৃত্তি করতে দেয়।

তবে লিংকডহ্যাশসেটের উত্সকোডে কেবলমাত্র হ্যাশসেটের কলিং কনস্ট্রাক্টর রয়েছে। সুতরাং যেখানে ডাবল-লিঙ্কযুক্ত তালিকা এবং সন্নিবেশ আদেশ আছে?


2
উত্তর ট্র্যাক করার জন্য ইন্টেলিজ (সিটিআরএল + বি) বিকল্পটি ব্যবহার করুন। :)
ডেল্টা

অবশ্যই আপনার সংযুক্ত উত্স কোড প্রয়োজন। :)
ডেল্টা

উত্তর:


65

উত্তর মিথ্যা যা কন্সট্রাকটরLinkedHashSet ব্যবহার বেস বর্গ গঠন করা:

public LinkedHashSet(int initialCapacity, float loadFactor) {
    super(initialCapacity, loadFactor, true);      // <-- boolean dummy argument
}

...

public LinkedHashSet(int initialCapacity) {
    super(initialCapacity, .75f, true);            // <-- boolean dummy argument
}

...

public LinkedHashSet() {
    super(16, .75f, true);                         // <-- boolean dummy argument
}

...

public LinkedHashSet(Collection<? extends E> c) {
    super(Math.max(2*c.size(), 11), .75f, true);   // <-- boolean dummy argument
    addAll(c);
}

এবং (এর একটি উদাহরণ) HashSetবুলিয়ান আর্গুমেন্ট গ্রহণকারী কোনও কনস্ট্রাক্টর বর্ণনা করা হয়েছে, এবং এর মতো দেখতে:

/**
 * Constructs a new, empty linked hash set.  (This package private
 * constructor is only used by LinkedHashSet.) The backing
 * HashMap instance is a LinkedHashMap with the specified initial
 * capacity and the specified load factor.
 *
 * @param      initialCapacity   the initial capacity of the hash map
 * @param      loadFactor        the load factor of the hash map
 * @param      dummy             ignored (distinguishes this
 *             constructor from other int, float constructor.)
 * @throws     IllegalArgumentException if the initial capacity is less
 *             than zero, or if the load factor is nonpositive
 */
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}

2
একটি অভিভাবক শ্রেণীর একটি শিশু শ্রেণির জন্য স্পষ্টভাবে কার্যকারিতা রয়েছে, পার্থক্য করার জন্য একটি উপেক্ষিত যুক্তি
ট্রুবেনফুচস

5
কনস্ট্রাক্টর ডিসামিগিগুয়েশনের জন্য ডামি প্যারামিটার ব্যবহার করে ঠিক একটি পরিষ্কার নকশা নয়।
এরিক জে।

8
এটি যুক্তিসঙ্গতভাবে পরিষ্কার ডিজাইন, কারণ এপিআই পরিষ্কার (এই হ্যাশসেট কনস্ট্রাক্টরটি প্যাকেজ ব্যক্তিগত)। শ্রেণীর ব্যবহারকারীদের জন্য বাস্তবায়নের বিশদটি গুরুত্বপূর্ণ নয়। এই কোডটি বজায় রাখা আরও কঠিন হতে পারে তবে জাভা.ইটিল ক্লাসের ক্ষেত্রে, এমনকি খুব সামান্য পারফরম্যান্সের উন্নতিও এটি সমর্থন করতে পারে।
lbalazscs

25

LinkedHashSetএর কনস্ট্রাক্টররা নিম্নলিখিত বেস ক্লাস কনস্ট্রাক্টরকে ডাকে:

HashSet(int initialCapacity, float loadFactor, boolean dummy) {
  map = new LinkedHashMap<E, Object>(initialCapacity, loadFactor);
}

আপনি দেখতে পাচ্ছেন, অভ্যন্তরীণ মানচিত্রটি একটি LinkedHashMap। আপনি যদি ভিতরে সন্ধান করেন তবে আপনি LinkedHashMapনিম্নলিখিত ক্ষেত্রটি আবিষ্কার করতে পারবেন:

private transient Entry<K, V> header;

এটি প্রশ্নের লিঙ্কযুক্ত তালিকা।


24

HashSet হয় unordered এবং পাঁচমিশালী সেট করুন।
LinkedHashSet হয় আদেশ সংস্করণ HashSet করুন।

হ্যাশসেট এবং লিংকডহ্যাশসেটের মধ্যে একমাত্র পার্থক্য হ'ল:
লিঙ্কডহ্যাশসেট সন্নিবেশনের ক্রমটি বজায় রাখে।

যখন আমরা কোনও হ্যাশসেটের মাধ্যমে পুনরাবৃত্তি করি , তখন লিংকডহ্যাশসেটের ক্ষেত্রে এটি অনুমানযোগ্য হলেও অর্ডারটি অনাকাঙ্ক্ষিত

লিঙ্কডহ্যাশসেট কীভাবে সন্নিবেশ ক্রম বজায় রাখার কারণ তা হ'ল:
অন্তর্নিহিত ব্যবহৃত ডেটা স্ট্রাকচারটি ডাবলি-লিংকড-তালিকা


9

আপনার যে HashSetকন্সট্রাক্টর বলে তার উত্সটি দেখে নেওয়া উচিত ... এটি একটি বিশেষ নির্মাতা যা কেবল একটিটির পরিবর্তে ব্যাকিংকে Mapএকটি LinkedHashMapকরে তোলে HashMap



5

আমি আপনাকে LinkedHashSetবেশিরভাগ সময় ব্যবহার করার পরামর্শ দিচ্ছি , কারণ এতে সামগ্রিকভাবে আরও ভাল পারফরম্যান্স রয়েছে ):

  1. অনুমানযোগ্য পুনরাবৃত্তির আদেশ লিঙ্কডহ্যাশসেট (ওরাকল)
  2. লিঙ্কডহ্যাশসেট হ্যাশসেটের চেয়ে সন্নিবেশের জন্য বেশি ব্যয়বহুল;
  3. সাধারণত তুলনায় কিছুটা ভাল পারফরম্যান্স HashMap, কারণ বেশিরভাগ সময় আমরা পুনরাবৃত্তির জন্য সেট কাঠামো ব্যবহার করি।

পারফরম্যান্স পরীক্ষা:

------------- TreeSet -------------
 size       add  contains   iterate
   10       746       173        89
  100       501       264        68
 1000       714       410        69
10000      1975       552        69
------------- HashSet -------------
 size       add  contains   iterate
   10       308        91        94
  100       178        75        73
 1000       216       110        72
10000       711       215       100
---------- LinkedHashSet ----------
 size       add  contains   iterate
   10       350        65        83
  100       270        74        55
 1000       303       111        54
10000      1615       256        58

আপনি উত্স পরীক্ষার পৃষ্ঠাটি এখানে দেখতে পারেন: চূড়ান্ত পারফরম্যান্স পরীক্ষার উদাহরণ


2
আমি এই "বেঞ্চমার্ক" এর আগে জেভিএমের কোনও উষ্ণতা দেখছি না, সুতরাং আমি সেই ডেটাটিকে গুরুত্ব সহকারে নেব না। আরও পড়ুন
ফেলিক্স এস

3

হ্যাশসেট: আনঅর্ডার্ড আসলে actually যদি আপনি প্যারামিটারটি পাস করেন মানে

Set<Integer> set=new HashSet<Integer>();
for(int i=0;i<set.length;i++)
{
  SOP(set)`enter code here`
}

আউট পুট: 2,1,3অনুমানযোগ্য হতে পারে না। পরের বার অন্য আদেশ।

LinkedHashSet() যা ফিফু অর্ডার উত্পাদন করে।


3

HashSet সন্নিবেশ আইটেমের ক্রম বজায় রাখুন না সন্নিবেশ আইটেমের ক্রম
LinkedHashSet বজায় রাখা

উদাহরণ

Set<String> set = ...;// using new HashSet<>() OR new LinkedHashSet<>()
set.add("2");
set.add("1");
set.add("ab");
for(String value : set){
   System.out.println(value);
}  

HashSet আউটপুট

1
ab
2

LinkedHashSet আউটপুট

2
1
ab

2

HashSet:

আন্ডারলাইন করা ডেটা স্ট্রাকচার হ্যাশটেবল। সদৃশ বস্তুগুলির অনুমতি নেই .in সেকশন অর্ডার সংরক্ষণ করা হয়নি এবং এটি হ্যাজ কোড অব অবজেক্টের উপর ভিত্তি করে। নাল সন্নিবেশ সম্ভব (কেবল একবার)। এটি সিরিয়ালাইজেবল, ক্লোনযোগ্য তবে র্যান্ডমএ্যাক্সেস ইন্টারফেস নয় বাস্তবায়ন করে। ঘন ঘন অপারেশন অনুসন্ধান অপারেশন হলে হ্যাশসেট সেরা চয়ন করা উচিত।

হ্যাশসেটে সদৃশদের অনুমতি নেই if ব্যবহারকারীরা যখন আমরা কোনও সংকলন বা রানটাইম ব্যতিক্রম না পেয়ে নকল সন্নিবেশ করার চেষ্টা করছেন। যুক্ত পদ্ধতি সহজভাবে মিথ্যা।

কন্সট্রাকটর:

হ্যাশসেট এইচ = নতুন হ্যাশসেট (); ডিফল্ট প্রাথমিক ক্ষমতা 16 এবং ডিফল্ট পূরণ অনুপাত (লোড ফ্যাক্টর) সহ একটি খালি হ্যাশসেট অবজেক্ট তৈরি করে 0.75।

হ্যাশসেট এইচ = নতুন হ্যাশসেট (ইন্ট প্রারম্ভিক ক্ষমতা); নির্দিষ্ট প্রাথমিকের ক্ষমতা সহ একটি খালি হ্যাশসেট অবজেক্ট তৈরি করে এবং ডিফল্ট ফিল রেশনটি 0.75 হয় 75

হ্যাশসেট এইচ = নতুন হ্যাশসেট (প্রারম্ভিক ক্ষমতা, ফ্লোট ভরাটটিও);

হ্যাশসেট এইচ = নতুন হ্যাশসেট (সংগ্রহ গ); প্রদত্ত সংগ্রহের জন্য সমতুল্য হ্যাশসেট অবজেক্ট তৈরি করে। এই কনস্ট্রাক্টর অর্থ সংগ্রহের অবজেক্টের মধ্যে আন্ত রূপান্তরকরণ।

LinkedHashSet:

এটি হ্যাশসেটের একটি শিশু শ্রেণি। এটি নীচের পার্থক্য বাদে (কনস্ট্রাক্টর এবং পদ্ধতি) সহ হ্যাশসেটের মতো ঠিক।

পার্থক্য হ্যাশসেট:

  1. আন্ডারলাইন করা ডেটা স্ট্রাকচার হ্যাশটেবল।
  2. সন্নিবেশ অর্ডার সংরক্ষণ করা হয় না।
  3. 1.2 সংস্করণ চালু।

LinkedHashSet:

  1. আন্ডারলাইন করা ডেটা স্ট্রাকচারটি লিংকডলিস্ট এবং হ্যাশটেবলের সংমিশ্রণ।
  2. সন্নিবেশ আদেশ সংরক্ষণ করা হয়।
  3. 1.4 সংস্করণে উপস্থাপিত।

1

আপনি যদি LinkedHashSetশ্রেণীর কাছ থেকে আহ্বান করা কনস্ট্রাক্টরগুলি একবার দেখে নেন তবে আপনি দেখতে পাবেন যে অভ্যন্তরীণভাবে এটি LinkedHashMapব্যাকিংয়ের উদ্দেশ্যে ব্যবহৃত হয়।


0

সমস্ত পদ্ধতি এবং কনস্ট্রাক্টর একই তবে লিনাকডহ্যাশেট সন্নিবেশ ক্রম বজায় রাখবে তবে এটি সদৃশগুলিকে অনুমতি দেবে না allow

হ্যাশেট কোনও সন্নিবেশ ক্রম বজায় রাখবে না। এটি তালিকা এবং সেট সহজ সমন্বয় :)

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