java hasan একটি LinkedHashMap অবজেক্ট থেকে কী এবং মূল্য ফেরত পাওয়ার জন্য অর্ডারটি কি নিশ্চিত?



jahid hasan drama video (5)

আমি জানি LinkedHashMap একটি প্রত্যাশিত পুনরাবৃত্তি আদেশ আছে (সন্নিবেশ আদেশ)। Set LinkedHashMap.keySet() দ্বারা ফেরত এবং LinkedHashMap.values() দ্বারা ফেরত Collection এছাড়াও এই আদেশ বজায় রাখা?

https://ffff65535.com


মানচিত্র ইন্টারফেসটি তিনটি সংগ্রহের দৃশ্য সরবরাহ করে যা একটি মানচিত্রের সামগ্রীগুলিকে কীগুলির একটি সেট, মান সংগ্রহ, বা কী-মান ম্যাপিংয়ের সেট হিসাবে দেখার অনুমতি দেয়। মানচিত্রের ক্রমানুসারে মানচিত্রের সংগ্রহের দৃশ্যগুলির ইথারেটরগুলি তাদের উপাদানগুলি ফেরত দেওয়ার ক্রম হিসাবে সংজ্ঞায়িত করা হয়। কিছু মানচিত্র বাস্তবায়ন, যেমন TreeMap ক্লাসের মতো, তাদের অর্ডার হিসাবে নির্দিষ্ট নিশ্চয়তা দেয়; অন্যান্য, HashMap ক্লাস মত, না।

- Map

এই লিঙ্ক তালিকা পুনরাবৃত্তি ক্রম সংজ্ঞায়িত করে, যা সাধারণত ক্রম যা মানচিত্র ( সন্নিবেশ-আদেশ ) মধ্যে সন্নিবেশ করা হয়।

LinkedHashMap

সুতরাং, হ্যাঁ, keySet() , values() , এবং entrySet() (তিনটি সংগ্রহের মতামত উল্লেখ করা হয়েছে) অভ্যন্তরীণ লিঙ্ক তালিকা ব্যবহার করে entrySet() ফেরত মান দেয়। এবং হ্যাঁ, Map জন্য LinkedHashMap এবং LinkedHashMap এটি গ্যারান্টি দেয়।

যে সব পরে, এই বর্গ বিন্দু।


AFAIK এটি নথিভুক্ত নয় তাই আপনি "আনুষ্ঠানিকভাবে" অনুমান করতে পারবেন না। এটি অসম্ভব, তবে, বর্তমান বাস্তবায়ন পরিবর্তন হবে।

আপনি যদি অর্ডারটি নিশ্চিত করতে চান তবে আপনি মানচিত্রের প্রবেশদ্বারগুলির উপর পুনরাবৃত্তি করতে এবং আপনার পছন্দের অর্ডার ফাংশনের সাথে সাজানো সেটটিতে ঢুকতে চাইতে পারেন, যদিও আপনি স্বাভাবিকভাবেই পারফরম্যান্স খরচ প্রদান করবেন।


আমি মনে করি না আপনি কীসেট () এবং মান () এর ক্রমটি নির্ধারণ করতে পারেন।

আমি সহজেই LinkedHashMap এর একটি বাস্তবায়ন লিখতে পারি যা আপনাকে অকার্যকর keySet () এবং মান (), যতক্ষণ আমি মানচিত্রে সংজ্ঞায়িত এই দুটি পদ্ধতির চুক্তিতে আটকে থাকি এবং হ্যাশম্যাপে ওভাররাইড করা পর্যন্ত।


ইন্টারফেসের দিকে তাকিয়ে এটি একটি সরল Set এবং কোনও SortedSet Set নয়। সুতরাং কোন গ্যারান্টি নেই।

বাস্তবায়ন (সর্বদা একটি খারাপ ধারণা) এ খুঁজছেন দ্বারা একটি নিখুঁত গ্যারান্টি গ্রহণ করার আগে এছাড়াও অন্যান্য অন্যান্য জাভা বাস্তবায়নের বাস্তবায়ন তাকান :)

উদাহরণস্বরূপ আপনি কন্সট্রকটারে কীসেট দিয়ে একটি TreeSet তৈরি করতে পারেন।


LinkedHashMap.keySet() এবং LinkedHashMap.entrySet() ফিরে যাওয়ার সাথে বিভ্রান্ত হবেন না এবং তাই এটি অর্ডারের নিশ্চয়তা দেয় না!

Set TreeSet , TreeSet ইত্যাদির বাস্তবায়নের সাথে একটি ইন্টারফেস। Set ইন্টারফেসের HashSet বাস্তবায়ন অর্ডার প্রদানের নিশ্চয়তা দেয় না। কিন্তু TreeSet না। এছাড়াও LinkedHashSet না।

সুতরাং রিটার্নিং সেট রেফারেন্স অর্ডার করার গ্যারান্টি দেবে কিনা তা জানতে LinkedHashMap Set কিভাবে প্রয়োগ করা হয়েছে তার উপর এটি নির্ভর করে। আমি LinkedHashMap এর উত্স কোডের মাধ্যমে গিয়েছিলাম, এটি এভাবে দেখায়:

private final class KeySet extends AbstractSet<K> {...}
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {...}

সুতরাং LinkedHashMap / KeySet Set নিজস্ব KeySet বাস্তবায়ন আছে। সুতরাং HashSet দিয়ে এই বিভ্রান্তি করবেন না।

এছাড়াও, আদেশ বালতি মধ্যে সন্নিবেশ করা হয় কিভাবে দ্বারা রক্ষণাবেক্ষণ করা হয়। addEntry(..) এর addEntry(..) পদ্ধতিটি দেখুন এবং HashMap সাথে এটি তুলনা করুন যা HashMap এবং LinkedHashMap HashMap মধ্যে প্রধান পার্থক্য তুলে ধরে।





linkedhashmap